查验身份证2
查驗(yàn)身份證2
Time Limit: 1 Sec??Memory Limit: 128 MB?? 64bit IO Format: %lld
Description
一個(gè)合法的身份證號(hào)碼由17位數(shù)字(包含地區(qū)、出生日期和順序編號(hào))加1位校驗(yàn)碼組成。
校驗(yàn)碼的計(jì)算規(guī)則如下:
(1)首先對(duì)前17位數(shù)字加權(quán)求和,權(quán)重分配為:{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,3};
(2)然后將計(jì)算的和對(duì)11取模得到值Z;
(3)最后按照以下關(guān)系對(duì)應(yīng)Z值與校驗(yàn)碼M的值:
? ? ?Z: 0 1 2 3 4 5 6 7 8 9 10
? ? ?M:9 8 7 6 5 4 3 2 1 0 X
現(xiàn)在給定一些身份證號(hào)碼,請(qǐng)你編寫程序驗(yàn)證校驗(yàn)碼的有效性。
?
Input
多組測(cè)試數(shù)據(jù),每組測(cè)試數(shù)據(jù)在一行中給出1個(gè)18位身份證號(hào)碼。
?
Output
如果身份證號(hào)碼正確,輸出“OK”,否則輸出“Error”。
只要前17位全為數(shù)字且最后一位校驗(yàn)碼計(jì)算準(zhǔn)確,則號(hào)碼算正確。
?
Sample Input
111111111111111117 111111111111111110 222222222222222225 22222222222222222X 123456789012345677 135246789159357082 012345789632145974
?
Sample Output
OK Error OK Error Error OK Error
題目分析:
用我的24K純金狗眼來(lái)看……這應(yīng)該是字符串!
%c 和 %d 的距離……就是48……
#include <stdio.h>
#include <stdlib.h>int main()
{int i, j;int f,z;char s[20];int m[11] = {9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 10 };int q[17] = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 3};int sum = 0;while(gets(s)!=NULL){sum = 0;f = 0;for(i=0;i<17;i++){s[i] -= 48;sum += s[i]*q[i];}z = sum%11;for(i=0;i<=10;i++){if(z==i){z=m[i];break;}}if(s[17]-48==z)f=1;if(s[17]=='X' && z==10)f=1;if(f==1)printf("OK\n");elseprintf("Error\n");}return 0;
}
?
?
總結(jié)
- 上一篇: 岁月开头的成语有哪些?
- 下一篇: 宏达烧烤的烤海肠多少钱?