如果您单击链接阅读它,我很久以前就写了一个“ C语言信息查询系统”. 据估计c 号码验证,我的宏伟代码会让我震惊. 最近,我回顾/了解了文件操作并更改了代码,这是以前文件操作的愿望. ,但是我花了一个下午来纠正写作. 应该没有错误(如果您有兴趣进行测试,欢迎提供反馈)该代码是在Linux下编写的c 号码验证,我不知道它是否在win下被报告. 这对我来说感觉很好,我认为花了几十行代码才能获得150余行. 就这样吧. 废话不多,看程序执行的原理和代码:
判断验证是否非法的原则:
一个. 将前一个ID号的17位数字乘以不同的系数. 从第一名到第十七名的系数是: 7 9 10 5 8 8 2 2 1 6 3 7 9 10 5 8 4 2
两个. 将17位数字与系数相乘的结果相加.
三个. 使用加法和除法11. 余数是什么?
四个. 其余的只能包含11位数字,即0 1 2 3 4 5 6 7 8 910. 最后一个对应的ID卡的号码分别为1 0 X 9 8 7 6 5 4 3 2.
五个. 根据以上所述,如果余数为2,则罗马数字X将出现在ID卡的第18位. 如果余数为10,则的最后一个数字为2.
例如: 一个男人的ID号是34052419800101001X. 我们必须查看该是否为合法.
首先: 我们得出结论,前17名的乘积之和为189
然后: 将189除以11得到17 + 2/11,这意味着余数为2.
最后: 通过相应的规则,您可以知道与余数2对应的数字是x. 因此,这是一个合格的ID号.
此外,根据第17位数字判断性别,奇数是男性,偶数是女性[c] #include #include #include #define IDLEN 18 #define AREALEN 6#define BIRTHLEN 8#define FILEURL“ ./UserID.txt"int LegalInput(char p []){int i; printf(“请输入您的\ n>”); fgets(p,(sizeof(char)+1)* IDLEN,stdin); / *确定输入数据的长度是否合法* / if((strlen(p)-1)!= IDLEN){printf(“错误!您需要输入'18'长度ID卡\ n”); return EXIT_FAILURE;} / *确定输入的前17位数字是否为* / for(i = 0; i \ n“);返回EXIT_FAILURE;} memset(buf,0,sizeof(buf)); / *判断输入是否合法* / int ret = -1; while(ret!= EXIT_SUCCESS){if( LegalInput(userInput_char)== EXIT_SUCCESS)ret = LegalID(userInput_char,userInput_int);} / *保存前1-6个区域* / for(i = 0; i /用户ID. 在txt中,格式如下: [代码]: 110000: 北京: 110100: 北京市: 110101: 北京东城区: 110102: 北京西城区: 110103: 北京崇文区: 110104: 北京宣武区: 110105: 朝阳区北京: 110106: 北京市丰台区: 110107: 北京市石景山区: 110108: 北京市海淀区: 110109: 北京市门头沟区[/代码]可以在网上找到程序代码,或使用我的文件: 百度网盘(可能不完整,在测试过程中没有发现任何区域
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-230040-1.html