| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 374 人关注过本帖
标题:校验身份证的问题
只看楼主 加入收藏
twitty
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2015-11-6
结帖率:0
收藏
 问题点数:0 回复次数:3 
校验身份证的问题
身份证号码前17为分别按顺序乘如下数字(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2)。把成绩结果求和,然后再除以11取余。根据余数从下面这些数中找到对应的数字(1,0,X,9,8,7,6,5,4,3,2)

我做到一半,想运行一下,结果运行不出,强制停止运作,是不是我做的太复杂了,电脑不接受;

#include<stdio.h>
int main()
{int n,i,y,a[17],j;
    scanf("%d",n);
    y=n%10;
    n/=10;
    for(i=16;i>=0;i--)
    {a[i]=n%10;
    n/=10;   
   
    }
j=(a[0]*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)%11;
printf("%d\n",j);
 return 0;
 }
搜索更多相关主题的帖子: 身份证号码 include 
2015-11-07 23:39
lzl123321
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:41
专家分:148
注 册:2015-10-15
收藏
得分:0 
回复问题很大,已修改

[此贴子已经被作者于2015-11-8 13:29编辑过]

2015-11-08 05:20
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
程序代码:
#include<stdio.h>

int main()
{
    char s[18]={'\0'};
    char t[]={'1','0','X','9','8','7','6','5','4','3','2'};
    int j;
    scanf("%s",s);
    j=(( s[0]-'0')*7+   (s[1]-'0')*9+ (s[2]-'0')*10+(s[3]-'0')*5+ (s[4]-'0')*8+ (s[5]-'0')*4+  \
       ( s[6]-'0')*2+   (s[7]-'0')*1+ (s[8]-'0')*6+ (s[9]-'0')*3+(s[10]-'0')*7+(s[11]-'0')*9+  \
       (s[12]-'0')*10+ (s[13]-'0')*5+(s[14]-'0')*8+(s[15]-'0')*4+(s[16]-'0')*2)%11;
    printf("%s的校验码是%c\n",s,t[j]);
    return 0;
}

DO IT YOURSELF !
2015-11-08 08:52
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:0 
刚下载了vs2010旗舰版,就拿这个试试。vs不像vc运行结束要敲任意键关闭控制台窗口,所以用了个stdlib库里的system("pause"),用自己的身份证验证还真是这样,代码及运行效果如下:
图片附件: 游客没有浏览图片的权限,请 登录注册

程序代码:
// jysfz.cpp: 主项目文件。

#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
void main()
{
    char s[20],m[]={"79:584216379:5842"},w[]={"10X98765432"}; //asc码9后面的是冒号,所以用‘:’代替校验运算码10
    int i,j;
    scanf("%s",s);
    for(i=0,j=0;s[i+1];i++)j+=(s[i]-'0')*(m[i]-'0'); //通过判断s[i+1]的结束循环可保留最后一位不参与运算
    if(s[i]>'Z')s[i]-=32;  //小写字母转大写字母
    if(s[i]==w[j%11])printf("身份证%s合法\n",s);  //验证身份证末位,15位身份证无校验位
    else printf("身份证%s不合法\n",s);
    system("pause");
}

能编个毛线衣吗?
2015-11-08 12:00
快速回复:校验身份证的问题
数据加载中...
 
   



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

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