📄 custvercode.c
字号:
/* * FILE : CustVerCode.c * PROVIDED BY : branch ShanXi of CCB * DESCRIPTION : 根据前10位生成第11位,即校验位 */#include <stdio.h>#include <math.h>#include <ctype.h>#include <stdlib.h>#include <string.h>#define SPLIT "#" /* 补充字符*/#define CONST_MOD 10 /*模常量*/int ig_CharLen;char cg_Buffer[1024],cg_Buffer1[1024];/* Global function */char PUB_ProCifCusNoVer(char *epcBuf);/* Local function */static void Trim_SupChar();static int Do_Comp_Val(int n);static char CustomNo_Ver_Pro();/*字符值对照*/static int char_map[][10]={ { '0','1','2','3','4','5','6','7','8','9' }, { 0,1,2,3,4,5,6,7,8,9 }};/* 函数说明:Trim_SupChar(对客户号中的补充字符进行删除) 输入参数:客户号 输出参数: 描述:*/static void Trim_SupChar(){ char cp_TmpBuf[1024]; char *pc_TmpBuf; int ip_Loc; memset(cp_TmpBuf,0,sizeof(cp_TmpBuf)); pc_TmpBuf=strstr(cg_Buffer,SPLIT); if( pc_TmpBuf != NULL ){ ip_Loc=pc_TmpBuf-&cg_Buffer[0]; memcpy(cp_TmpBuf,cg_Buffer,ip_Loc); cp_TmpBuf[ip_Loc]='\0'; strcat(cp_TmpBuf,&cg_Buffer[ip_Loc+1]); printf("Verify String is [%s]\n",cp_TmpBuf); strcpy(cg_Buffer1,cp_TmpBuf); }}/* 函数说明: 递归求模 输入参数: 客户号的长度 输出参数: 模值 描述:*/static int Do_Comp_Val(int n){ int ip_RetVal; int ip_TmpVal,ip_TmpVal1; int j; if(n== 0) return CONST_MOD; ip_TmpVal=Do_Comp_Val(n-1); for(j=0;j<10;j++) if( cg_Buffer1[n-1] == char_map[0][j] ) { ip_TmpVal1=char_map[1][j]; break; } /* if( cg_Buffer[n-1] > 10 ){ ip_TmpVal1=cg_Buffer[n-1]-55; } */ ip_TmpVal+=ip_TmpVal1; ip_TmpVal=ip_TmpVal%10; if(ip_TmpVal == 0 ) { ip_TmpVal=10; } ip_TmpVal*=2; ip_TmpVal=ip_TmpVal%37; ip_RetVal=ip_TmpVal; return ip_RetVal;}/* 函数说明: 客户号校验位的产生 输入参数: 客户号 输出参数: 校验位(整数) 描述:*/static char CustomNo_Ver_Pro(){ int ip_RetVal,n,m,j; int ip_TmpVal; char cp_RetChar; ig_CharLen=strlen(cg_Buffer1); n=ig_CharLen; ip_RetVal=Do_Comp_Val(n); m=0; while(1) { ip_TmpVal=CONST_MOD*m+1-ip_RetVal; if( ip_TmpVal > 0 ) { ip_RetVal=ip_TmpVal; break; } m+=1; } for(j=0;j<10;j++) { if( ip_RetVal == char_map[1][j] ) { cp_RetChar=char_map[0][j]; break; } } return cp_RetChar; }char PUB_ProCifCusNoVer(char *epcBuf){ int ip_CustomNo_Ver; char cp_RetChar; memset(cg_Buffer,0,sizeof(cg_Buffer)); memset(cg_Buffer1,0,sizeof(cg_Buffer1)); strcpy(cg_Buffer,epcBuf); Trim_SupChar(); strcpy(cg_Buffer1,cg_Buffer); cp_RetChar=CustomNo_Ver_Pro(); return(cp_RetChar);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -