javascript实现根据身份证号读取相关信息


Posted in Javascript onDecember 17, 2014

公民身份号码由六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码组成。

地址码 前两位表示省,中间两位表示市,后两位表示县

顺序码 表示同一地址码所标识的区域范围内,对同年、月、日出生的人员编定的顺序号。顺序码的奇数分给男性,偶数分给女性。

校验码 是根据前面十七位数字码,按照ISO 7064:1983.MOD 11-2校验码计算出来的检验码。

校验码计算方法:
    1)将前面的身份证号码17位数分别乘以不同的系数,从第一位到第十七位的系数分别为:7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 ;
    2)将这17位数字和系数相乘的结果相加,用加出来和除以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。

身份证号合法性验证  支持15位和18位身份证号 支持地址编码、出生日期、校验位验证

<div style="padding:20px 40px;">

        <h1 style="font-size:20px;color:#999;">身份证查询</h1>

        <input type="text" placeholder="输入身份证号" id="code">

        <input type="button" value="查询" id="btn">

        <p id="home"><strong>籍    贯:</strong><span></span></p>

        <p id="birthday"><strong>出生日期:</strong><span></span></p>

        <p id="sex"><strong>性    别:</strong><span></span></p>

    </div>

    <script type="text/javascript">

        //去掉字符串头尾空格   

        var home='',birthday='',sex='';

        function trim(str) {   

            return str.replace(/^\s*|\s*$/g, "");   

        }

        //验证身份证

        function IdentityCodeValid(code) {

            code=trim(code);

            var city={11:"北京",12:"天津",13:"河北",14:"山西",15:"内蒙古",21:"辽宁",22:"吉林",23:"黑龙江 ",31:"上海",32:"江苏",33:"浙江",34:"安徽",35:"福建",36:"江西",37:"山东",41:"河南",42:"湖北 ",43:"湖南",44:"广东",45:"广西",46:"海南",50:"重庆",51:"四川",52:"贵州",53:"云南",54:"西藏 ",61:"陕西",62:"甘肃",63:"青海",64:"宁夏",65:"新疆",71:"台湾",81:"香港",82:"澳门"};    

            if(!code || !/^\d{6}(18|19|20)?\d{2}(0[1-9]|1[012])(0[1-9]|[12]\d|3[01])\d{3}(\d|X)$/i.test(code)){

                alert("身份证号格式错误");

                home='',birthday='',sex='';

                return false;

            }

            if(!city[code.substring(0,2)]){

                alert("地址编码错误");

                home='',birthday='',sex='';

                return false;

            }

            if(code.length == 18){    //18位身份证需要验证最后一位校验位

                var codeArr = code.split('');        

                var factor = [ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 ];    //加权因子                

                var parity = [ 1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2 ];                        //校验位

                var sum = 0;

                for (var i = 0; i < 17; i++){

                    sum += codeArr[i] * factor[i];

                }

                if(parity[sum % 11] != codeArr[17]){

                    alert("校验位错误");

                    home='',birthday='',sex='';

                    return false;

                }                

            }

            //省份

            home = city[code.substring(0,2)];    

            //生日

            birthday = code.substring(6,10)+'年'+code.substring(10,12)+'月'+code.substring(12,14)+'日';

            //性别

            if(code.length==15){

                sex = code.substring(14,15)%2==0 ? '女':'男';

            }else if(code.length==18){

                sex = code.substring(14,17)%2==0 ? '女':'男';

            }

        }

           //输出结果

        document.querySelector('#btn').onclick=function(){

            var code=document.querySelector('#code').value;

            IdentityCodeValid(code);

            document.querySelector('#home span').innerHTML=home;

            document.querySelector('#birthday span').innerHTML=birthday;

            document.querySelector('#sex span').innerHTML=sex;

        }

    </script>

本文主要是根据公民身份证的规则,读取相关的身份信息,非常方便实用,推荐给大家。

Javascript 相关文章推荐
Iframe 自适应高度并实时监控高度变化的js代码
Oct 30 Javascript
JavaScript必看小技巧(必看)
Jun 07 Javascript
简单分析javascript中的函数
Sep 10 Javascript
jQuery validate插件功能与用法详解
Dec 15 Javascript
微信小程序 Canvas增强组件实例详解及源码分享
Jan 04 Javascript
jQuery窗口拖动功能的实现代码
Feb 04 Javascript
javascript 使用正则test( )第一次是 true,第二次是false
Feb 22 Javascript
ionic实现下拉刷新载入数据功能
May 11 Javascript
深入理解Vue2.x的虚拟DOM diff原理
Sep 27 Javascript
vue路由--网站导航功能详解
Mar 29 Javascript
巧妙运用v-model实现父子组件传值的方法示例
Apr 07 Javascript
JavaScript实现页面高亮操作提示和蒙板
Jan 04 Javascript
node.js中的fs.appendFile方法使用说明
Dec 17 #Javascript
javascript操作数组详解
Dec 17 #Javascript
node.js中的fs.appendFileSync方法使用说明
Dec 17 #Javascript
javascript实现节点(div)名称编辑
Dec 17 #Javascript
node.js中的fs.createReadStream方法使用说明
Dec 17 #Javascript
node.js中的fs.createWriteStream方法使用说明
Dec 17 #Javascript
node.js中的fs.futimesSync方法使用说明
Dec 17 #Javascript
You might like
php的控制语句
2006/10/09 PHP
php 伪造本地文件包含漏洞的代码
2011/11/03 PHP
PHP中的gzcompress、gzdeflate、gzencode函数详解
2014/07/29 PHP
laravel返回统一格式错误码问题
2019/11/04 PHP
Javascript 模式实例 观察者模式
2009/10/24 Javascript
有趣的javascript数组定义方法
2010/09/10 Javascript
ExtJs事件机制基本代码模型和流程解析
2010/10/24 Javascript
Extjs4中tree的拖拽功能(可以两棵树之间拖拽) 简单实例
2013/12/08 Javascript
javascript trim函数在IE下不能用的解决方法
2014/09/12 Javascript
JavaScript的作用域和块级作用域概念理解
2014/09/21 Javascript
RequireJS多页面应用实例分析
2016/06/29 Javascript
js实现动态创建的元素绑定事件
2016/07/19 Javascript
微信小程序-滚动消息通知的实例代码
2017/08/03 Javascript
javascript数组定义的几种方法
2017/10/06 Javascript
JavaScript中Object基础内部方法图
2018/02/05 Javascript
webpack+react+antd脚手架优化的方法
2018/04/02 Javascript
JS实现的小火箭发射动画效果示例
2018/12/08 Javascript
使用layui 的layedit定义自己的toolbar方法
2019/09/18 Javascript
[42:32]Secret vs Optic 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
[53:44]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Magma BO3 第一场 1月31日
2021/03/11 DOTA
Python切片用法实例教程
2014/09/08 Python
Python itertools模块详解
2015/05/09 Python
Python selenium文件上传方法汇总
2020/11/19 Python
python的unittest测试类代码实例
2017/12/07 Python
python安装教程
2018/02/28 Python
对python 合并 累加两个dict的实例详解
2019/01/21 Python
python买卖股票的最佳时机(基于贪心/蛮力算法)
2019/07/05 Python
python使用pip安装模块出现ReadTimeoutError: HTTPSConnectionPool的解决方法
2019/10/04 Python
Python基于smtplib协议实现发送邮件
2020/06/03 Python
会计专业毕业生自我评价
2013/09/25 职场文书
中专生求职自荐信范文
2013/12/22 职场文书
市场部规章制度
2014/01/24 职场文书
会议活动邀请函
2014/01/27 职场文书
活动费用申请报告
2015/05/15 职场文书
2015秋季开学演讲稿范文
2015/07/16 职场文书
2015中秋节晚会开场白
2015/07/30 职场文书