身份证校验原理和PHP实现

原文地址:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=21126994&id=3938244

关于身份证的校验算法问题

身份证15位升级到18位,原来年用2位且没有最后一位,从左到右方分别表示

①1-2 升级行政区代码

②3-4 地级行政区划分代码

③5-6 县区行政区分代码

④7-10 11-12 13-14 出生年、月、日

⑤15-17 顺序码,同一地区同年、同月、同日出生人的编号,奇数是男性,偶数是女性

⑥18 校验码,如果是0-9则用0-9表示,如果是10则用X(罗马数字10)表示

ISO 7064:1983.MOD 11-2校验码

∑(a[i]*W[i]) mod 11 ( i = 18,17,16 ... 2 ) 最后一位是校验位 1 
 
  "*" 表示乘号
  i--------表示身份证号码每一位的序号,从右至左,最左侧为18,最右侧为1。
  a[i]-----表示身份证号码第 i 位上的号码
  W[i]-----表示第 i 位上的权值 W[i] = 2^(i-1) mod 11  【这里得到的序列是 7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2】
  计算公式 (1) 令结果为 R
 
  根据下表找出 R 对应的校验码即为要求身份证号码的校验码C。
  R 0 1 2 3 4 5 6 7 8 9 10
  C 1 0 X 9 8 7 6 5 4 3 2
  由此看出 X 就是 10,罗马数字中的 10 就是 X

1、将前面的身份证号码17位数分别乘以不同的系数。第i位对应的数为[2^(18-i)]mod11。从第一位到第十七位的系数分别为: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;

下面是我自己写的一个简单的PHP实现的过程:

    <?php
    /**
    * 输入 id 号码 然后检验是否合适
    **/
    function checkId($id) {
        $len = strlen($id);
        if($len != 18) {
            return 0;
        }
        $a=str_split($id,1);
        $w=array(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2);
        $c=array(1,0,‘X‘,9,8,7,6,5,4,3,2);
        $sum = 0;
        for($i=0;$i<17;$i++){
                $sum= $sum + $a[$i]*$w[$i];
        }
        $r=$sum%11;
        $res=$c[$r];
        //echo "校验位是: ".$res;
        if ($res == $a[17]) {
            return 1;
        } else {
            return 0;
        }
    }

使用Excel进行校验计算的模型,假设号码在A1单元格的内部,则在计算栏里面输入如下的公式即可计算:

  1. =LOOKUP(MOD(MID($A$1,1,1)*MOD(2^17,11)+MID($A$1,2,1)*MOD(2^16,11)+MID($A$1,3,1)*MOD(2^15,11)+MID($A$1,4,1)*MOD(2^14,11)+MID($A$1,5,1)*MOD(2^13,11)+MID($A$1,6,1)*MOD(2^12,11)+MID($A$1,7,1)*MOD(2^11,11)+MID($A$1,8,1)*MOD(2^10,11)+MID($A$1,9,1)*MOD(2^9,11)+MID($A$1,10,1)*MOD(2^8,11)+MID($A$1,11,1)*MOD(2^7,11)+MID($A$1,12,1)*MOD(2^6,11)+MID($A$1,13,1)*MOD(2^5,11)+MID($A$1,14,1)*MOD(2^4,11)+MID($A$1,15,1)*MOD(2^3,11)+MID($A$1,16,1)*MOD(2^2,11)+MID($A$1,17,1)*MOD(2^1,11),11),{0;1;2;3;4;5;6;7;8;9;10},{1;0;"X";9;8;7;6;5;4;3;2})

下面这个图则是对身份证进行校验计算的模型:

下面是国家发布的GB文档

GB11643-1999 国家标准公民身份号码.pdf

时间: 2024-10-13 21:42:30

身份证校验原理和PHP实现的相关文章

身份证校验

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

计算机网络原理和OSI模型与TCP模型

计算机网络原理和OSI模型与TCP模型 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.计算机网络的概述 1.计算机网络的定义 计算机网络是一组自治计算机的互连的集合 2.计算机网络的基本功能 a.资源共享 b.分布式处理与负载均衡 c.综合信息服务 3.计算机网络的演进 4.按照地域范围 a>.LAN(Local Area Network) 通常指几千米以内的,可以通过某种介质互联的计算机.打印机.modem或其他设备的集合 MAN(Metropolitan Area N

Mybatis插件原理和PageHelper结合实战分页插件(七)

今天和大家分享下mybatis的一个分页插件PageHelper,在讲解PageHelper之前我们需要先了解下mybatis的插件原理.PageHelper 的官方网站:https://github.com/pagehelper/Mybatis-PageHelper 一.Plugin接口 mybatis定义了一个插件接口org.apache.ibatis.plugin.Interceptor,任何自定义插件都需要实现这个接口PageHelper就实现了改接口 package org.apach

(转)详解LVS负载均衡之三种工作模型原理和10种调度算法

前言:最近在为我们的产品在做高可用,一边搭环境,一边了解相关知识,搜到这篇博客,质量不错,表述清晰,于是转载过来学习. 标签:详解LVS负载均衡之三种工作模型原理和10种调度算法 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://linuxnx.blog.51cto.com/6676498/1195379 LVS负载均衡原理和算法详解    Internet的快速增长使多媒体网络服务器面对的访问数量快速增加,服务器需要具备提供大

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:

iOS开发UI篇—程序启动原理和UIApplication

iOS开发UI篇-程序启动原理和UIApplication 一.UIApplication 1.简单介绍 (1)UIApplication对象是应用程序的象征,一个UIApplication对象就代表一个应用程序. (2)每一个应用都有自己的UIApplication对象,而且是单例的,如果试图在程序中新建一个UIApplication对象,那么将报错提示. (3)通过[UIApplicationsharedApplication]可以获得这个单例对象 (4) 一个iOS程序启动后创建的第一个对

加密、解密原理和openssl自建CA过程详解

一.加密和解密相关知识简介 1.信息安全标准 NIST(National Institute of Standards and Technology)美国国家标准与技术研究院,制定了网络信息安全与保密的三个要素: 保密性(confidentiality):信息不泄露给非授权用户.实体或过程,或供其利用的特性.(一般包括数据保密性.隐私性.) 完整性(Integrity):数据未经授权不能进行改变的特性.即信息在存储或传输过程中保持不被修改.不被破坏和丢失的特性.(一般包括数据完整性.系统完整性.