我是C新手,一般编程,所以我研究了一下,想要制作一个简单的程序来验证我国的个人数字代码。这是程序:C数字代码验证器
#include <stdio.h>
int validateCNP(char cnp[13]);
int main(int argc, const char * argv[])
{
char cnp[13];
printf("Introduceti CNP-ul:\n");
scanf("%s", cnp);
if(validateCNP(&cnp[0]) == 1) {
printf("CNP valid");
} else {
printf("CNP invalid");
}
return 0;
}
int validateCNP(char cnp[13]) {
char verif[13];
int intVerif[12], intCnp[13];
int i, checksum = 0;
strcpy(&verif[0], "279146358279");
for (i = 0; i<11; i++){
intVerif[i] = (unsigned)verif[i] - 48;
}
for (i=0; i<12; i++) {
intCnp[i] = cnp[i] - 48;
}
for (i=0; i<11; i++) {
checksum += intCnp[i] * intVerif[i];
}
checksum %= 11;
if (checksum == intCnp[12]) {
return 1;
} else {
return 0;
}
}
样本输出
Introduceti CNP-ul:
1650116398203
(lldb)
这似乎也当字符串转换成int数组,它搞砸了最后一个元素
Printing description of intVerif:
(int [12]) intVerif = {
[0] = 2
[1] = 7
[2] = 9
[3] = 1
[4] = 4
[5] = 6
[6] = 3
[7] = 5
[8] = 8
[9] = 2
[10] = 7
[11] = 32767
}
Printing description of intCnp:
(int [13]) intCnp = {
[0] = 1
[1] = 6
[2] = 5
[3] = 0
[4] = 1
[5] = 1
[6] = 6
[7] = 3
[8] = 9
[9] = 8
[10] = 2
[11] = 0
[12] = 0
}
可能有人指出我做错了什么,我尝试了不同的方法,似乎没有任何工作。
当您的意思是“0”时,切勿写入“48”。 – unwind