身份证校验(c++实现)

描述:

我国国标〖GB 11643-1999〗中规定:公民身份号码是18位特征组合码,由十七位数字本体码和一位数字校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。其校验码(最后一位)计算方法和步骤为:

(1)十七位数字本体码加权求和公式

S = Sum(Ai * Wi), i = 0, ... , 16 ,先对前17位数字的权求和

其中Ai:表示第i位置上的身份证号码数字值

Wi:表示第i位置上的加权因子,前17位加权因子从左到右分别为

Wi:7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2

(2)计算模

Y = mod(S, 11)

(3)通过模Y查下表得到对应的校验码


Y

0

1

2

3

4

5

6

7

8

9

10

校验码

1

0

X

9

8

7

6

5

4

3

2

例如:某身份证前17位为11010519491231002


i

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

wi

7

9

10

5

8

4

2

1

6

3

7

9

10

5

8

4

2

 

1

1

0

1

0

5

1

9

4

9

1

2

3

1

0

0

2


7

9

0

5

0

20

2

9

24

27

7

18

30

5

0

0

4

得到和为:167;则模为y=167%11=2

查(3)得校验码为X(大写)

请按上面所述步骤编程,输入一个二代身份证号,检查该身份证是否正确。

输入:输入若干行,每行一个身份证号码,最后一行输入-1

输出:输出1代表正确,0代表错误

input:

120223198902021249
130132199210293822
130402198207290622
-1output:110
 1 #include<iostream>
 2 #include<string>
 3 using namespace std;
 4
 5 int cal(string a)
 6 {
 7     return (a[0] - ‘0‘) * 7 + (a[1] - ‘0‘) * 9 + (a[2] - ‘0‘) * 10 +  (a[3] - ‘0‘) * 5 + (a[4] - ‘0‘) * 8 + (a[5] - ‘0‘) *4  + (a[6] - ‘0‘) * 2 + (a[7] - ‘0‘) * 1 + (a[8] - ‘0‘) * 6 +(a[9] - ‘0‘) * 3 + (a[10] - ‘0‘) * 7 + (a[11] - ‘0‘) * 9 + (a[12] - ‘0‘) * 10 + (a[13] - ‘0‘) * 5 + (a[14] - ‘0‘) * 8 + (a[15] - ‘0‘) * 4 +(a[16] - ‘0‘) * 2;
 8 }
 9
10 char s(string a)
11 {
12     int k = cal(a) % 11;
13     if (k == 0)
14         return ‘1‘;
15     else if (k == 1)
16         return ‘0‘;
17     else if (k == 2)
18         return ‘X‘;
19     else
20         return ‘0‘+12-k;
21 }
22 int main()
23 {
24     string number;
25     while ((cin >> number) && number != "-1")
26     {
27         if (number[17] == s(number))
28             cout << "1" << endl;
29         else
30             cout << "0" << endl;
31     }
32     system("pause");
33     return 0;
34 }    
时间: 2024-10-27 12:26:31

身份证校验(c++实现)的相关文章

身份证校验

1 namespace CheckIdenoDemo 2 { 3 class Program 4 { 5 static void Main(string[] args) 6 { 7 Console.WriteLine("请输入您的18位身份证号码:"); 8 string readstring = Console.ReadLine(); 9 10 IdentifyCheck idenCheck = new IdentifyCheck(); 11 12 idenCheck.Identit

java实现身份证校验

原文来自:java教程网 题目:身份证校验 身份证校验 如果让你设计个程序,用什么变量保存身份证号码呢?长整数可以吗?不可以! 因为有人的身份证最后一位是"X" 实际上,除了最后一位的X,不会出现其它字母! 身份证号码18位 = 17位 + 校验码 校验码的计算过程: 例如:身份证前17位 = ABCDEFGHIJKLMNOPQ A~Q 每位数字乘以权值求和(每位数字和它对应的“权”相乘后累加) 17位对应的权值分别是: 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8

证件类型为身份证号时进行身份证校验

需求:代办人身份证号改为代办人证件类型(默认为身份证号),后面跟着号码,房主和代办人的证件类型为身份证号时进行身份证校验 sf_ghgl_add.jsp <td class="labelCss">代办人证件类型:</td> <td><select id="zjlx" width="10px" class="easyui-combobox" data-options="url:

JS身份证校验

身份证校验 function identityCodeValid(code) { var city={11:"北京",12:"天津",13:"河北",14:"山西",15:"内蒙古",21:"辽宁",22:"吉林",23:"黑龙江 ",31:"上海",32:"江苏",33:"浙江",34:

最严格的身份证校验(Java版)

上一篇博客贴出了JavaScript版本的身份证校验,本篇博客将贴出Java版的身份证校验:         import java.util.Date; /** * 校验身份证号码是否有效 * * @author GaoHuanjie */         public class CheckCertificateNo { @SuppressWarnings("deprecation") publicstaticvoid main(String[] args) { String ce

最严格的身份证校验(JavaScript版)

在JavaWeb研发过程中为了获取有效的用户信息,校验其数据的有效性非常是必要,以下贴出在项目中用到的关于身份证的校验: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312&quo

1010: 身份证校验

1010: 身份证校验 时间限制: 10 Sec  内存限制: 128 MB提交: 298  解决: 229[提交][状态][讨论版] 题目描述 我国国标[GB 11643-1999]中规定:公民身份号码是18位特征组合码,由十七位数字本体码和一位数字校验码组成.排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码.其校验码(最后一位)计算方法和步骤为: (1)十七位数字本体码加权求和公式 S = Sum(Ai * Wi), i = 0, ... , 16 

身份证校验,绝对严格

身份证校验,绝对严格 function checkIdCard(idcard) {  let ereg;  // const Errors = new Array(  //   '验证通过',  //   '身份证号码位数不对',  //   '身份证号码出生日期超出范围或含有非法字符',  //   '身份证号码校验错误',  //   '身份证地区非法'  // );  const area = {    11: '北京', 12: '天津', 13: '河北', 14: '山西', 15:

ES01 数据类型、正则表达式、身份证校验

1 基本数据类型 参见W3C的教程即可 2 正则表达式 参考博文:点击前往 3 身份证校验 参考博文:点击前往 <div class="panel panel-primary"> <div class="panel-heading">身份证编号验证</div> <div class="panel-body div_body"> <div class="form_div"&g

身份证校验算法(C语言)

/* 身份证校验算法: 根据各位的权重,求得校验和 对校验和取余(11),求得校验序号 根据校验序号,找到对应的校验码 身份证号最后一位为校验码 */ #include <stdio.h> int g_IDCard[18]={0}; int g_Factor[17]={7, 9, 10, 5, 8,4, 2, 1, 6, 3,7, 9, 10, 5, 8,4, 2}; //身份证号从左到右各位的权重 char Validate[11]={'1', '0', 'X', '9', '8','7',