ITPub博客

首页 > 应用开发 > IT综合 > 身份证号码问题:从15位转换为18位(程序)

身份证号码问题:从15位转换为18位(程序)

原创 IT综合 作者:chenjinglzz 时间:2007-10-15 23:02:29 0 删除 编辑

在Visual c++6.0下调时通过。

[@more@]//////////////
#include
/////////
int main()
{
int i,flag,iS = 0;
//加权因子常数
int iW[]={7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};
//校验码常数
char LastCode[]="10X98765432";
//新身份证号
char perIDNew[18]="";
char perIDOld[15]="";
printf("本程序的目的是将中华人民共和国公民的15位身份证号码转换为18位!n");
printf("请输入15位身份证号码: ");
scanf("%s",perIDOld);
for(i=0,flag=0;i<15;i++)
{
if('0'>perIDOld[i]||perIDOld[i]>'9')
{printf("n您输入的第 %d 位不是数字!",i+1);flag=1;}
}
if(flag==1)
{printf("n很抱歉,您刚才输入的15位身份证号码有误,请查证后再转换!nn");return 0;}
perIDOld[15]='';
/*
perIDNew=perIDOld.Substring(0,6);
//填在第6位及第7位上填上‘1’,‘9’两个数字
perIDNew += "19";
perIDNew += perIDOld.Substring(6,9);
*/
for ( i=0;i<6;i++)
{
perIDNew[i]=perIDOld[i];
}
perIDNew[6]='1';
perIDNew[7]='9';
for ( i=6;i<15;i++)
{
perIDNew[i+2]=perIDOld[i];
}
//进行加权求和
for( i=0; i<17; i++)
{
iS+=(perIDNew[i]-'0') * iW[i];
}
//取模运算,得到模值
//从LastCode中取得以模值为索引号的值,加到身份证的最后一位,即为新身份证号
perIDNew[17]= LastCode[iS%11];
perIDNew[18]='';
printf("您输入的15位身份证号码为: %sn对应的18位身份证号码为: %sn",perIDOld,perIDNew);
return 0;
}
//////////

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/11355887/viewspace-976780/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2007-12-10

  • 博文量
    17
  • 访问量
    335030