身份证最后一位按照ISO7064:1983.MOD11-2校验码

居民身份证号码,根据〖中华人民共和国国家标准 GB 11643-1999〗中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。即8位身份证号码的最后一位是数字校验码。  校验码(身份证最后一位)是根据前面十七位数字码,按照ISO7064:1983.MOD11-2校验码计算出来的检验码。  计算方法:  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、通过上面得知如果余数是3,就会在身份证的第18位数字上出现的是9。如果对应的数字是2,身份证的最后一位号码就是罗马数字x。  例如:某男性的身份证号码为【53010219200508011x】, 我们看看这个身份证是不是合法的身份证。  首先我们得出前17位的乘积和【(5*7)+(3*9)+(0*10)+(1*5)+(0*8)+(2*4)+(1*2)+(9*1)+(2*6)+(0*3)+(0*7)+(5*9)+(0*10)+(8*5)+(0*8)+(1*4)+(1*2)】是189,然后用189除以11得出的结果是189/11=17----2,也就是说其余数是2。最后通过对应规则就可以知道余数2对应的检验码是X。所以,可以判定这是一个正确的身份证号码。

java--18位身份证号最后一位(检验码)是怎么算出来的?

身份证的最后一位是根据前17位数字计算出来的检验码。计算方法是:将身份证号码前17位数分别乘以不同的系数。从第1位到第17位的系数分别为:7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2;将乘积之和除以11,余数可能为0 1 2 3 4 5 6 7 8 9 10。则根据余数,分别对应的最后一位身份证的号码为1 0 X 9 8 7 6 5 4 3 2。编写程序,输入身份证号码前17位,输出对应的检验码。

package acm;
import java.util.*;
public class Main3 {
     public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String string = scanner.nextLine();
        int[] x = {7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
        char[] y = {‘1‘,‘0‘,‘x‘,‘9‘,‘8‘,‘7‘,‘6‘,‘5‘,‘4‘,‘3‘,‘2‘};
        int sum=0;
        for (int i = 0; i < string.length(); i++) {
            int n=string.charAt(i)-48;
            sum=sum+n*x[i];
        }
        //System.out.println(sum);
        sum=sum%11;
        System.out.println(y[sum]);
    }
}

JavaScript方法如下:

//验证方法
function verifyCode(id){
 if(id.length !=18 )
  return false;
 /*1、从第一位到第十七位的系数分别为:
   7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2
   将这17位数字和系数相乘的结果相加。 */
 var arr = [7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2];
 var sum = 0;
 for(var i=0; i<arr.length; i++){
  sum += parseInt(id.charAt(i)) * arr[i];
 }
 //2、用加出来和除以11,看余数,
 var c = sum%11;
 //3、分别对应的最后一位身份证的号码为:1-0-X-9-8-7-6-5-4-3-2
 var ch = [‘1‘, ‘0‘, ‘X‘, ‘9‘, ‘8‘, ‘7‘, ‘6‘, ‘5‘, ‘4‘, ‘3‘, ‘2‘];
 var code = ch[c];
 var last = id.charAt(17);
 last = last==‘x‘ ? ‘X‘: last;
 return last == code;
 }
var id = "34052419800101001X";
 console.log(verifyCode(id));
//#include "stdafx.h"
#include "stdio.h"
#include "string.h"
int main(int argc, char* argv[])
{
    char id[18];
    char mw[12] = { "10X98765432" }, c;
    int xs[18] = { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 };
    int i, sum = 0, ys, k, cj;
    for (k = 0; k <= 16; k++)
    {
        scanf("%c", &id[k]);
    }
    for (i = 0; i <= 16; i++)
    {
        cj = (id[i]-‘0‘) * xs[i];/////////
        sum = sum + cj;
        //i++;////////
    }
    ys = sum % 11;
    c = mw[ys];
    printf("%c", c);
    return 0;
}

原文地址:https://www.cnblogs.com/timdes1/p/8371695.html

时间: 2024-10-08 06:11:22

身份证最后一位按照ISO7064:1983.MOD11-2校验码的相关文章

全国身份证前6位地区编码归属地(2016年06月27日)共6724条

简介: 前段时间在忙单位的一个小系统,用来管理从业人员的电子档案,最核心.复杂的功能已经完成,现在基本告一段落.用户可上传已扫描或拍照的档案图片,然后选择一个(已导入数据库)的从业人员信息,将扫描件与数据库信息对应,便于日后查询,也减轻了档案室的日常工作量.现在单位已经有一个成熟的系统用来管理从业人员信息,但只有一个档案编号,无法查询纸质档案信息,经常查档案就找档案室,太繁琐.带来各种麻烦.而从业人员涉及到的信息字段比较多,好在原系统可以导出数据库信息,我直接导入新系统就可以用了.省的操作员在录

iOS 身份证最后一位是X,输入17位后自动补全X(转)

非原创,转载自http://blog.csdn.net/l2i2j2/article/details/51542028如果身份证最后一位是X,输入17位后自动补全X// textField代理方法 - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { // string.length为0,表明没有输

身份证最后一位号码,代表你的爱情

---------你的身份证最后一位号码,代表你的爱情每个人的身份证都是唯一的,那么它所代表的爱情呢?                                 身份证最后一位号码,代表一种水果,大家来选吧,看看你的爱情会是什么样的?                                                                    1: 杨梅:2: 椰子:3: 葡萄:4: 西瓜:5:菠萝:6:芒果:7:火龙果:8:水蜜桃:9:哈密瓜:0:香蕉:X:草莓:

身份证号码 15位和18位 验证

首先先了解 身份证号码的编码规则,从百度经验上找到了别人的分享 :http://jingyan.baidu.com/article/7f41ececff944a593d095c8c.html 感谢. 15位长度的验证正则是从网上找的,但发现并不是万能的(月份可以出现00,日期可以出现00等), 所以做了如下改良,但仍旧存在一些问题,如880231这样的生日也可以验证功过 所以可以考虑将身份证号码的年月日单独判断,在此略去. 18位长度的就按校验规则来校验即可. function chkIdNo(

身份证号码15位转18位 C#实现

[身份证最后一位神秘X的由来]身份证中的“冷知识”1999年的今天,<国务院关于实行公民身份号码制度的决定>被发布,当年10月1日实施.为什么有的有X?这位数是根据前17位计算出的校验码.如某人尾号是0-9,不会有X,如是10,则用X代替.Ⅹ是罗马数字的10,这能保证身份证号不多位. /// <summary> /// 转换15位身份证号码为18位 /// </summary> /// <param name="oldIDCard">15

计算身份证校验码(最后一位)

在线预览 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> #msg{ color: red; } </style> </head> <body> 身份证号:<input id="id-card

JS-计算身份证校验码(最后一位)

在线预览 <!DOCTYPE html> <html lang="en"> <head> <title>Document</title> <style> #msg{ color: red; } </style> </head> <body> 身份证号:<input id="id-card" type="text">(前17位)&

C# 身份证号码15位和18位验证

/// <summary> /// 身份证 /// </summary> [Serializable] public class IDCard {     /// <summary>     /// 身份证号     /// </summary>     public string IDCardNum { get; set; }     /// <summary>     /// 行政区     /// </summary>     

身份证号生成,校验码计算

二代身份证号有18位,组成是: 6位地区码+8位出生年月日+3位顺序码+1位校验码 其中,校验码计算如下图,本范例按照红色计算方向走 第一步骤就是映射权重:第二步骤是求积:第三步骤相加求余:最后一个步骤就是查找码表得出最后1位字符 红色方向数字更小,计算更快. import randomimport time   # 地区区域码,此范例只列出3位areas = ('610622', '410901', '321281', '350581')# 身份证前17位权重w17 = (7, 9, 10,