| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 524 人关注过本帖, 1 人收藏
标题:关于输出身份证的最后一位,求修改
只看楼主 加入收藏
取消关键字高亮
孟颖童
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2015-11-14
结帖率:100%
收藏(1)
已结贴  问题点数:10 回复次数:8 
关于输出身份证的最后一位,求修改
#include "stdafx.h"

int main(int argc, char* argv[])
{
    int e,b,c;
    char a[18];
    scanf("%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c",&a[1],&a[2],&a[3],&a[4],&a[5],&a[6],&a[7],&a[8],&a[9],&a[10],&a[11],&a[12],&a[13],&a[14],&a[15],&a[16],&a[17]);
    e=7*a[1]+9*a[2]+10*a[3]+5*a[4]+8*a[5]+4*a[6]+2*a[7]+1*a[8]+6*a[9]+3*a[10]+7*a[11]+9*a[12]+10*a[13]+5*a[14]+8*a[15]+4*a[16]+2*a[17];
    b=e/11;
switch(b)
{
case 0:c=1;break;
case 1:c=0;break;
case 2:c=X;break;
case 3:c=9;break;
case 4:c=8;break;
case 5:c=7;break;
case 6:c=6;break;
case 7:c=5;break;
case 8:c=4;break;
case 9:c=3;break;
case 10:c=2;break;
}
printf("%d",c)
return 0;
}

第十八位数字的计算方法为:
1.将前面的身份证号码17位数分别乘以不同的系数。从第一位到第十七位的系数分别为:7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2
2.将这17位数字和系数相乘的结果相加。
3.用加出来和除以11,看余数是多少?
4余数只可能有0 1 2 3 4 5 6 7 8 9 10这11个数字。其分别对应的最后一位身份证的号码为1 0 X 9 8 7 6 5 4 3 2。
5.通过上面得知如果余数是2,就会在身份证的第18位数字上出现罗马数字的Ⅹ。如果余数是10,身份证的最后一位号码就是2。

例如:某男性的身份证号码是34052419800101001X。我们要看看这个身份证是不是合法的身份证。
首先:我们得出,前17位的乘积和是189
然后:用189除以11得出的结果是17 + 2/11,也就是说余数是2。
最后:通过对应规则就可以知道余数2对应的数字是x。所以,这是一个合格的身份证号码。



[此贴子已经被作者于2015-11-14 16:17编辑过]

搜索更多相关主题的帖子: include 身份证 
2015-11-14 16:15
tredy6t
Rank: 2
等 级:论坛游民
帖 子:41
专家分:59
注 册:2015-8-6
收藏
得分:0 
求len,输出str[len-1]的那个数
2015-11-14 16:26
孟颖童
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2015-11-14
收藏
得分:0 
没明白。。。
2015-11-14 16:38
孟颖童
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2015-11-14
收藏
得分:0 
能不能在我的程序上直接做些修改,谢过大神~
2015-11-14 16:39
孟颖童
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2015-11-14
收藏
得分:0 
PASS:我改了一下,但是程序显示还是有错误,我不会改,求帮忙。。。
#include "stdafx.h"

 int main(int argc, char* argv[])
 {
     int i;sum=0;
     int a[18];//身份证的18位数字
     int b[17]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};//前17位数的系数
     char c[11]={'1','0','X','9','8','7','6','5','4','3','2'};//第18位数的结果
     scanf("%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c",&a[0],&a[1],&a[2],&a[3],&a[4],&a[5],&a[6],&a[7],&a[8],&a[9],&a[10],&a[11],&a[12],&a[13],&a[14],&a[15],&a[16]);
 for(i=0;i<17;i++)
 {sum=sum+a[i]*b[i];}
 printf("%c",c[sum%11]);
 return 0;
 }

2015-11-14 16:45
随风的飞叶
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:90
专家分:158
注 册:2015-10-8
收藏
得分:0 
stdafx.h是什么意思。
2015-11-14 16:52
ntprc0x
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:23
专家分:130
注 册:2015-11-14
收藏
得分:10 
#include "stdafx.h"

int main(int argc, char* argv[])
{
     int i;sum=0;
     //int a[18];//身份证的18位数字
     char a[18];
     int b[17]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};//前17位数的系数
     char c[11]={'1','0','X','9','8','7','6','5','4','3','2'};//第18位数的结果
     scanf("%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c",&a[0],&a[1],&a[2],&a[3],&a[4],&a[5],&a[6],&a[7],&a[8],&a[9],&a[10],&a[11],&a[12],&a[13],&a[14],&a[15],&a[16]);
for(i=0;i<17;i++)
//{sum=sum+a[i]*b[i];}
{sum=sum+(a[i]-'0')*b[i];}
printf("%c",c[sum%11]);
return 0;
}
2015-11-14 21:11
独孤蝴蝶
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2015-11-14
收藏
得分:0 
没明白
2015-11-15 10:56
快速回复:关于输出身份证的最后一位,求修改
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.057744 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved