分享

一段简易的身份证校验和校验码计算的C++程序

 canghaiyisu2 2014-07-10
//目前已知的bug:选择功能界面不可输入除数字以外的字符。
//水平有限,还请谅解。
#include <iostream>
using namespace std;
int main ()
{
char b[18],a[17];
int i,t,p;
char x;
int sum;
cout<<"请输入功能:\n";
cout<<"1.校验\t2.计算\n";
cin>>t;
while(t!=1&&t!=2)
{
cout<<"输入有误,请重新输入!\n";
cin>>t;
}
if(t==1)
{
cout<<"请输入身份证号码:\n";
for(i=0;i<18;i++)
cin>>b[i];
sum=(b[0]-48)*7+(b[1]-48)*9+(b[2]-48)*10+(b[3]-48)*5+(b[4]-48)*8+(b[5]-48)*4+(b[6]-48)*2+(b[7]-48)*1+(b[8]-48)*6+(b[9]-48)*3+(b[10]-48)*7+(b[11]-48)*9+(b[12]-48)*10+(b[13]-48)*5+(b[14]-48)*8+(b[15]-48)*4+(b[16]-48)*2;
p=sum%11;
switch (p)
{
case 0:x='1';break;
case 1:x='0';break;
case 2:x='X';break;
case 3:x='9';break;
case 4:x='8';break;
case 5:x='7';break;
case 6:x='6';break;
case 7:x='5';break;
case 8:x='4';break;
case 9:x='3';break;
case 10:x='2';break;
}
if(x==b[17])
cout<<"所输身份证号正确!\n";
else
cout<<"所输身份证号不正确!\n";
}
if(t==2)
{
cout<<"请输入身份证号前17位:\n";
for(i=0;i<17;i++)
cin>>a[i];
sum=(a[0]-48)*7+(a[1]-48)*9+(a[2]-48)*10+(a[3]-48)*5+(a[4]-48)*8+(a[5]-48)*4+(a[6]-48)*2+(a[7]-48)*1+(a[8]-48)*6+(a[9]-48)*3+(a[10]-48)*7+(a[11]-48)*9+(a[12]-48)*10+(a[13]-48)*5+(a[14]-48)*8+(a[15]-48)*4+(a[16]-48)*2;
p=sum%11;
switch (p)
{
case 0:x='1';break;
case 1:x='0';break;
case 2:x='X';break;
case 3:x='9';break;
case 4:x='8';break;
case 5:x='7';break;
case 6:x='6';break;
case 7:x='5';break;
case 8:x='4';break;
case 9:x='3';break;
case 10:x='2';break;
}
cout<<"校验码是"<<x<<endl;
cout<<"身份证号应为:\n";
for(i=0;i<17;i++)
cout<<a[i];
cout<<x;
}
return 0;
}

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约