本文共 916 字,大约阅读时间需要 3 分钟。
#includeint w[17] = { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};intf(char a[]) { // 前17位加权求和 int sum = 0; for( int i = 0; i < 17; i++ ) { sum += ((a[i] - '0') * w[i]); } return sum;}intjudge(char a[]) { // 检查前17位是否全为数字 int flag = 1; for( int i = 0; i < 17; i++ ) { if( !(a[i] >= '0' && a[i] <= '9') ) { flag = 0; } } return flag;}intmain() { char m[11] = { '1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'}; // 注意大写X int n, j, lflag; char num[20]; //数组开大一点,num[18]换行会影响结果? scanf("%d", &n); lflag = 1; for( j = 0; j < n; j++ ) { scanf("%s", num); // 前17位不全为数字 or 校验码无效,输出并标记有身份证不正常 if( (!judge(num)) || num[17] != m[f(num) % 11] ) { printf("%s\n", num); lflag = 0; } } if( lflag == 1 ) { printf("All passed\n"); } return 0;}
转载地址:http://ppkxi.baihongyu.com/