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 相关文章推荐
JavaScript CSS修改学习第五章 给“上传”添加样式
Feb 19 Javascript
jQuery中json对象的复制方式介绍(数组及对象)
Jun 08 Javascript
javascript实现根据身份证号读取相关信息
Dec 17 Javascript
js的flv视频播放器插件使用方法
Jun 23 Javascript
使用Jasmine和Karma对AngularJS页面程序进行测试
Mar 05 Javascript
基于jQuery倒计时插件实现团购秒杀效果
May 13 Javascript
js实现刷新页面后回到记录时滚动条的位置【两种方案可选】
Dec 12 Javascript
Node.js中process模块常用的属性和方法
Dec 13 Javascript
Webpack打包css后z-index被重新计算的解决方法
Jun 18 Javascript
vue router 源码概览案例分析
Oct 09 Javascript
JavaScript实现轮播图片完整代码
Mar 07 Javascript
解决vue $http的get和post请求跨域问题
Jun 07 Vue.js
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实现判断数组是一维、二维或几维的方法
2017/02/06 PHP
Yii2实现自定义独立验证器的方法
2017/05/05 PHP
PHP利用Cookie设置用户30分钟未操作自动退出功能
2017/07/03 PHP
PHP 应用容器化以及部署方法
2018/02/12 PHP
PHP基于cookie实现统计在线人数功能示例
2019/01/16 PHP
有关js的变量作用域和this指针的讨论
2010/12/16 Javascript
toggle一个div显示或隐藏且可扩展成自定义下拉框
2013/09/12 Javascript
基于jQuery的判断iPad、iPhone、Android是横屏还是竖屏的代码
2014/05/11 Javascript
Jquery给基本控件的取值、赋值示例
2014/05/23 Javascript
jQuery中get和post方法传值测试及注意事项
2014/08/08 Javascript
jQuery仿360导航页图标拖动排序效果代码分享
2015/08/24 Javascript
js一维数组、多维数组和对象的混合使用方法
2016/04/03 Javascript
javascript中this指向详解
2016/04/23 Javascript
Node.js与MySQL交互操作及其注意事项
2016/10/05 Javascript
jQuery访问浏览器本地存储cookie、localStorage和sessionStorage的基本用法
2017/10/20 jQuery
vue语法之拼接字符串的示例代码
2017/10/25 Javascript
vue实现多条件和模糊搜索功能
2019/05/28 Javascript
js实现多图和单图上传显示
2019/12/18 Javascript
vue-drag-chart 拖动/缩放图表组件的实例代码
2020/04/10 Javascript
Python发送form-data请求及拼接form-data内容的方法
2016/03/05 Python
Python Socket使用实例
2017/12/18 Python
Django学习笔记之为Model添加Action
2019/04/30 Python
详解python中的线程与线程池
2019/05/10 Python
Python实现带下标索引的遍历操作示例
2019/05/30 Python
python  文件的基本操作 菜中菜功能的实例代码
2019/07/17 Python
python调用支付宝支付接口流程
2019/08/15 Python
python飞机大战pygame碰撞检测实现方法分析
2019/12/17 Python
Python数据结构dict常用操作代码实例
2020/03/12 Python
英国玛莎百货美国官网:Marks & Spencer美国
2018/11/06 全球购物
建筑专业自荐信
2013/10/18 职场文书
青年安全生产示范岗事迹材料
2014/05/04 职场文书
人事局接收函
2015/01/30 职场文书
求职简历自我评价2015
2015/03/10 职场文书
观看《信仰》心得体会
2016/01/15 职场文书
2017年寒假少先队活动总结
2016/04/06 职场文书
《水浒传》读后感3篇(范文)
2019/09/19 职场文书