身份证号码的编排规则

简介: 作者:知乎用户链接:https://www.zhihu.com/question/19823489/answer/13074347来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
作者:知乎用户
链接:https://www.zhihu.com/question/19823489/answer/13074347
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

身份证号码中这些数字是怎样排列的,每个数字表示什么意思呢?下面就让我们一起来探索其中的规律吧!新的身份证号码是由18位数字组成的,它们分别表示:
(1)前1、2位数字表示:所在省份的代码;
(2)第3、4位数字表示:所在城市的代码;
(3)第5、6位数字表示:所在区县的代码;
(4)第7~14位数字表示:出生年、月、日;
(5)第15、16位数字表示:所在地的派出所的代码;
(6)第17位数字表示性别:奇数表示男性,偶数表示女性;
(7)第18位数字是校检码:也有的说是个人信息码,一般是随计算机的随机产生,
用来检验身份证的正确性。校检码可以是0~9的数字,有时也用x表示。
15位的身份证号
dddddd yymmdd xx p
18位的身份证号
dddddd yyyymmdd xx p y
其中dddddd为地址码(省地县三级)18位中的和15位中的不完全相同
yyyymmdd yymmdd 为出生年月日
xx顺号类编码
p性别
18位中末尾的y为校验码,将前17位的ascii码值经位移、异或运算结果不在0-9的令其为x
18位身份证标准在国家质量技术监督局于1999年7月1日实施的GB11643-1999《公民身份号码》中做了明确规定。
  GB11643-1999《公民身份号码》为GB11643-1989《社会保障号码》的修订版,其中指出将原标准名称“社会保障号码”更名为“公民身份号码”,另外GB11643-1999《公民身份号码》从实施之日起代替GB11643-1989。
  公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位校验码。其含义如下:
  1. 地址码:表示编码对象常住户口所在县(市、旗、区)的行政区划代码,按GB/T2260的规定执行。
  2. 出生日期码:表示编码对象出生的年、月、日,按GB/T7408的规定执行,年、月、日分别用4位、2位、2位数字表示,之间不用分隔符。
  3. 顺序码:表示在同一地址码所标识的区域范围内,对同年、同月、同日出生的人编定的顺序号,顺序码的奇数分配给男性,偶数分配给女性。

  校验的计算方式:
  1. 对前17位数字本体码加权求和
  公式为:S = Sum(Ai * Wi), i = 0, ... , 16
  其中Ai表示第i位置上的身份证号码数字值,Wi表示第i位置上的加权因子,其各位对应的值依次为: 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2
  2. 以11对计算结果取模
  Y = mod(S, 11)
  3. 根据模的值得到对应的校验码
  对应关系为:
   Y值: 0 1 2 3 4 5 6 7 8 9 10
  校验码:1 0 X 9 8 7 6 5 4 3 2
 
public class IdentityCard{
    int[] weight={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};    //十七位数字本体码权重
    char[] valid={ '1','0','X','9','8','7','6','5','4','3','2'};    //mod11,对应校验码字符值    

    ///card是除去最后一位前17位的号码
    public char getValidateCode(String card){
        int sum=0;
        int mode=0;
        for(int i=0;i<card.length();i++){
            sum=sum+Integer.parseInt(String.valueOf(card.charAt(i)))*weight[i];
        }
        mode=sum%11;
        return valid[mode];
    }

}

 

 
目录
相关文章
身份证号码的规则
身份证号码的规则1、15位身份证号码组成:ddddddyymmddxxs共15位,其中:dddddd为6位的地方代码,根据这6位可以获得该身份证号所在地。yy为2位的年份代码,是身份证持有人的出身年份。
2459 0
|
Python
验证18位身份证号码
#! /usr/bin/python # -*- coding: utf-8 -*- def check_id_num(id_num): assert len(id_num) == 18 and id_num[:17].
637 0
|
人工智能
自己写的身份证号码15位升18位的函数
今天在网上找到一个身份证号码15位升18位的算法,就随手自己写了一个函数来实现 Public Function s15to18()Function s15to18(ByVal str15 As String) As String        Dim strtemp As String        strtemp = Replace(str15, str15.
1052 0
|
安全 网络安全 数据安全/隐私保护
身份证号码实名认证能够保障网络交易的安全
随着互联网的普及,网络安全问题日益受到人们的关注。身份证号码实名认证作为一种有效的身份验证方式,能够保障网络交易的安全,防止身份信息被盗用。本文将详细介绍如何进行身份证号码实名认证,以及其意义和重要性。
|
8月前
|
文字识别 算法 API
视觉智能开放平台产品使用合集之需要核对身份证号码是不是本人注册的,该怎么操作
视觉智能开放平台是指提供一系列基于视觉识别技术的API和服务的平台,这些服务通常包括图像识别、人脸识别、物体检测、文字识别、场景理解等。企业或开发者可以通过调用这些API,快速将视觉智能功能集成到自己的应用或服务中,而无需从零开始研发相关算法和技术。以下是一些常见的视觉智能开放平台产品及其应用场景的概览。
对接身份证实名认证接口
官方直连、方便便捷、秒对接身份证实名认证接口
1880 0
|
测试技术 Python
中华人民共和国公民身份号码校验
source: http://zh.wikipedia.org/wiki/中华人民共和国公民身份号码 #!/usr/bin/python import re;#定义验证函数def IC_chk(ic_serial): #权重数组 iW = [7, 9, 10, 5, 8, 4, 2, ...
1036 0
|
算法
身份证号码算法的实现
身份证号码算法的实现   18位身份证标准在国家质量技术监督局于1999年7月1日实施的gb11643-1999《公民身份号码》中做了明确的规定。gb11643-1999《公民身份号码》为gb11643-1989《社会保障号码》的修订版,其中指出将原标准名称"社会保障号码"更名为"公民身份号码",另外gb11643-1999《公民身份号码》从实施之日起代替gb11643-1989。
1133 0
通过身份证号码判断是否已成年
通过身份证号码判断是否已成年
221 0
|
安全 数据安全/隐私保护 开发者
阿里云通信发布全新号码认证服务, 重新定义手机号码认证的方式
12月12日,阿里云通信宣布号码认证服务正式商用,将重新定义手机号码认证的方式。因移动应用实名制的政策要求,手机号码认证在移动APP的注册、登录等场景用的越来越多。而对于开发者来说,能完成手机号码认证的选择并不多,一般是借助短信、语音的基础通信通道,自己实现短信验证码或语音验证码来实现。
25073 0

热门文章

最新文章