1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
|
using namespace std; char cnid18crc(const char *id18); // 身份证 最后一位校验位 void cnid_15to18(char *id18 , const char *id15); // 身份证 15位升级18位 int main() { char cnid15[19] = "340524800101001"; char cnid18[19] ; cnid_15to18(cnid18, cnid15); cout << cnid15 << endl; cout << cnid18 << endl; return 0; } // 身份证 最后一位校验位 char cnid18crc(const char *id18) { int sigma = 0; int a[] = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2}; char w[] = {'1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'}; for (int i = 0; i < 17; i++) { int ai = id18[i] - '0'; int wi = a[i]; cout << ai << " * " << wi << "\t= " << (ai * wi) << endl; sigma += (ai * wi); } int number = sigma % 11; cout << w[number] << " ---->\t " << sigma << " mod 11 = " << number << endl ; return w[number]; } // 身份证 15位升级18位 void cnid_15to18(char *id18 , const char *id15) { char *ps = id18 + 2; strcpy(ps , id15); strncpy(id18 , id15 , 6); id18[6] = '1'; id18[7] = '9'; id18[17] = 'C'; id18[18] = '\0'; id18[17] = cnid18crc(id18); }
|