主页 > 电脑硬件  > 

C语言:生成校验码


题目描述

某商品的编号是有11位字符串组成,前10位的每一位都是一个0~9之间的数字,最后一位是一个校验码。校验码为0~10之间的数值,如果等于10,用大写“X”表示。校验规则如下:

sum=∑(ci×wi),其中ci是字符对应的数值,wi是对应的位权。将和值对11取余,如果余数为0,则表示该编号正确,否则编号有误。

从第一位开始到第11位的位权依次为:{29,23,19,17,13,11,7,5,3,2,1}

例如编号“15975374136”,依据上述规则,其sum=1×29+5×23+9×19+7×17+5×13+3×11+7×7+4×5+1×3+3×2+6×1=616, 616 mod 11=0,所以这是一个正确的编码。 类似的:3574186412X,78952147854,65892147891,96547123698都是正确的编码。 现在,给定这个编码的前面10位,请编程求出第11位校验码。如果校验码等于10的话,用大写的“X”表示。

提示 输入输出格式

输入格式

一行,由10个数字组成的字符串

输出格式

一个字符,表示所求的校验码

#include <stdio.h> #include <string.h> #include <math.h> int check(char arr[11]) { int weight[11]={29,23,19,17,13,11,7,5,3,2,1}; int sum=0; int i; for(i=0;i<10;i++) { sum+=(arr[i]-'0')*weight[i]; } int reminder=sum%11; if(reminder==0) { return 0; }else if(reminder==10) { return 10; }else{ return 11-reminder; } } int main() { char str[11]; gets(str); int end=check(str); if(end==10) { printf("%c",'X'); }else{ printf("%d",end); } return 0; }

标签:

C语言:生成校验码由讯客互联电脑硬件栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“C语言:生成校验码