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 相关文章推荐
jquery 淡入淡出效果的简单实现
Feb 07 Javascript
AngularJS的内置过滤器详解
May 14 Javascript
JS实现带鼠标效果的头像及文章列表代码
Sep 27 Javascript
实例讲解避免javascript冲突的方法
Jan 03 Javascript
在React框架中实现一些AngularJS中ng指令的例子
Mar 06 Javascript
微信小程序 仿猫眼实现实例代码
Mar 14 Javascript
weex slider实现滑动底部导航功能
Aug 28 Javascript
浅谈实现vue2.0响应式的基本思路
Feb 13 Javascript
微信小程序搭建(mpvue+mpvue-weui+fly.js)的详细步骤
Sep 18 Javascript
vue项目中使用scss的方法步骤
May 16 Javascript
解决layui弹出层layer的area过大被遮挡的问题
Sep 21 Javascript
Javascript的promise,async和await的区别详解
Mar 24 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
模拟OICQ的实现思路和核心程序(二)
2006/10/09 PHP
解析php框架codeigniter中如何使用框架的session
2013/06/24 PHP
thinkphp5实现微信扫码支付
2019/12/23 PHP
详解CSS样式中的 !important * _ 符号
2021/03/09 HTML / CSS
JavaScript制作简单的日历效果
2016/03/10 Javascript
JavaScript生成带有缩进的表格代码
2016/06/15 Javascript
运用js教你轻松制作html音乐播放器
2020/04/17 Javascript
JS返回只包含数字类型的数组实例分析
2016/12/16 Javascript
jQuery插件zTree实现获取当前选中节点在同级节点中序号的方法
2017/03/08 Javascript
Angualrjs 表单验证的两种方式(失去焦点验证和点击提交验证)
2017/05/09 Javascript
详解Vue爬坑之vuex初识
2017/06/14 Javascript
js排序与重组的实例讲解
2017/08/28 Javascript
axios中cookie跨域及相关配置示例详解
2017/12/20 Javascript
vue+swiper实现侧滑菜单效果
2017/12/28 Javascript
vue2.0+vuex+localStorage代办事项应用实现详解
2018/05/31 Javascript
vue 调用 RESTful风格接口操作
2020/08/11 Javascript
从源码角度来回答keep-alive组件的缓存原理
2021/01/18 Javascript
Python自动扫雷实现方法
2015/07/25 Python
老生常谈Python序列化和反序列化
2017/06/28 Python
解决Scrapy安装错误:Microsoft Visual C++ 14.0 is required...
2017/10/01 Python
机器学习经典算法-logistic回归代码详解
2017/12/22 Python
python3库numpy数组属性的查看方法
2018/04/17 Python
Python多继承顺序实例分析
2018/05/26 Python
TensorFlow 滑动平均的示例代码
2018/06/19 Python
python assert的用处示例详解
2019/04/01 Python
基于Python的图像数据增强Data Augmentation解析
2019/08/13 Python
详解vscode实现远程linux服务器上Python开发
2020/11/10 Python
非常震撼的纯CSS3人物行走动画
2016/02/24 HTML / CSS
秋天的雨教学反思
2014/04/27 职场文书
工会换届选举方案
2014/05/21 职场文书
地质工程专业毕业生求职信
2014/08/08 职场文书
校园新闻广播稿5篇
2014/10/10 职场文书
地震慰问信
2015/02/14 职场文书
就业推荐表自我评价范文
2015/03/02 职场文书
联谊会开场白
2015/06/01 职场文书
怎样写家长意见
2015/06/04 职场文书