2019独角兽企业重金招聘Python工程师标准>>>

根据1999年7月1日推出的《中华人民共和国国家标准》(GB 11643-1999)中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成;排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。
       地址码表示编码对象常住户口所在县(市、旗、区)的行政区划代码。
       出生日期码表示编码对象出生的年、月、日,其中年份用四位数字表示,年、月、日之间不用分隔符。
       顺序码表示同一地址码所标识的区域范围内,对同年、月、日出生的人员编定的顺序号。顺序码的奇数分给男性,偶数分给女性。
       校验码是根据前面十七位数字码,按照ISO 7064:1983.MOD 11-2校验码计算出来的检验码。

一个简单的测试页面

<html>
<head>
<script type="text/javascript">
function input_id_number(obj){
;
}
</script>
</head>
<body>
<form>
<input type="text" maxlength="18" onfocus="javascript:this.value='';" onkeyup="input_id_number(this)" onblur="input_id_number(this)" value="请输入身份证号"/>
</form>
</body>
</html>

现在我们来写这个函数。

首先保证用户输入的值前十七位为数字,最后一位只能为数字或者字母x,长度不能超过18位;

function input_id_number(obj) {var n = obj.value.match(/\d{0,17}(\d|x)/i);obj.value = n===null ? '' : n[0];if (obj.value.length == 18) {;}
}

现在我们开始写验证身份证有效性的函数

function check_id_number(obj) {var n = obj.value.match(/^[1-9][1-7]\d{4}(18|19|20)?\d{2}((0[1-9])|(1[012]))((0[1-9])|([12]\d)|(3[01]))\d{3}(\d|x)$/i);if (n===null) {obj.value = '身份证号码有误,请重新输入';return false;} else {obj.value = n[0];}var p={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:'澳门',91:'国外'};if (!p[obj.value.substr(0,2)]) {obj.value = '身份证号码有误,请重新输入';return false;}var month = obj.value.substr(10,2);var day = obj.value.substr(12,2);var max_month = '01,03,05,07,08,10,12,';if (max_month.indexOf(month + ',') < 0 && day == 31) {obj.value = '身份证号码有误,请重新输入';return false;}if (month == '02') {if (day > 29) {obj.value = '身份证号码有误,请重新输入';return false;}var year = obj.value.substr(6,4);if ((year%4>0 || (year % 100 == 0 && year % 400 >0)) &&  day == 29) {obj.value = '身份证号码有误,请重新输入';return false;  }}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 += obj.value[i] * factor[i];}if (obj.value[17] == 'X') {obj.value[17] = 'x';}if(parity[sum % 11] != obj.value[17]){obj.value = '身份证号码有误,请重新输入';return false;}
}

组合在一起:

function input_id_number(obj) {var n = obj.value.match(/\d{0,17}(\d|x)/i);obj.value = n===null ? '' : n[0];if (obj.value.length == 18) {check_id_number(obj);}
}
function check_id_number(obj) {var n = obj.value.match(/^[1-9][1-7]\d{4}(18|19|20)?\d{2}((0[1-9])|(1[012]))((0[1-9])|([12]\d)|(3[01]))\d{3}(\d|x)$/i);if (n===null) {obj.value = '身份证号码有误,请重新输入';return false;} else {obj.value = n[0];}var p={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:'澳门',91:'国外'};if (!p[obj.value.substr(0,2)]) {obj.value = '身份证号码有误,请重新输入';return false;}var month = obj.value.substr(10,2);var day = obj.value.substr(12,2);var max_month = '01,03,05,07,08,10,12,';if (max_month.indexOf(month + ',') < 0 && day == 31) {obj.value = '身份证号码有误,请重新输入';return false;}if (month == '02') {if (day > 29) {obj.value = '身份证号码有误,请重新输入';return false;}var year = obj.value.substr(6,4);if ((year%4>0 || (year % 100 == 0 && year % 400 >0)) &&  day == 29) {obj.value = '身份证号码有误,请重新输入';return false;    }}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 += obj.value[i] * factor[i];}if (obj.value[17] == 'X') {obj.value[17] = 'x';}if(parity[sum % 11] != obj.value[17]){obj.value = '身份证号码有误,请重新输入';return false;}
}

最终我们的测试页面是这样的:

<html>
<head>
<script type="text/javascript">
function input_id_number(obj) {var n = obj.value.match(/\d{0,17}(\d|x)/i);obj.value = n===null ? '' : n[0];if (obj.value.length == 18) {check_id_number(obj);}
}
function check_id_number(obj) {var n = obj.value.match(/^[1-9][1-7]\d{4}(18|19|20)?\d{2}((0[1-9])|(1[012]))((0[1-9])|([12]\d)|(3[01]))\d{3}(\d|x)$/i);if (n === null) {obj.value = '身份证号码有误,请重新输入';return false;} else {obj.value = n[0];}var p={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:'澳门',91:'国外'};if (!p[obj.value.substr(0,2)]) {obj.value = '身份证号码有误,请重新输入';return false;}var month = obj.value.substr(10,2);var day = obj.value.substr(12,2);var max_month = '01,03,05,07,08,10,12,';if (max_month.indexOf(month + ',') < 0 && day == 31) {obj.value = '身份证号码有误,请重新输入';return false;}if (month == '02') {if (day > 29) {obj.value = '身份证号码有误,请重新输入';return false;}var year = obj.value.substr(6,4);if ((year%4>0 || (year % 100 == 0 && year % 400 >0)) &&  day == 29) {obj.value = '身份证号码有误,请重新输入';return false;  }}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 += obj.value[i] * factor[i];}if (obj.value[17] == 'X') {obj.value[17] = 'x';}if(parity[sum % 11] != obj.value[17]){obj.value = '身份证号码有误,请重新输入';return false;}
}
</script>
</head>
<body>
<form>
<input type="text" maxlength="18" onfocus="javascript:this.value='';" onkeyup="input_id_number(this)" onblur="check_id_number(this)" value="请输入身份证号"/>
</form>
</body>
</html>

转载于:https://my.oschina.net/u/1164352/blog/2222603

只允许在数据框中输入身份证号的js函数相关推荐

  1. 在Exce中输入身份证号或长串数字出错的原因

     目录 在Exce中输入身份证号或长串数字出错的原因 原因是在输入身份证号前应先将单元格格式设置为文本格式,(一定要在输入前设置好) 第一步:在要输入的空白单元格处,点击右键选择"设置单元格 ...

  2. js技术输入框中输入身份证号自动带出年龄,生日,性别

    目录 1.分析: 2.页面设计: 3.js技术让我们的输入框回显数据: 4.页面展示结果: 1.分析: 1.问题场景:在写项目的时候遇到了这个问题自己觉得挺有意思的在这里我更大家分享一下 2.问题分析 ...

  3. 在Excel2010中输入身份证号

    在Excel2010中,只能输入15位有效数字,多余者后面续0.对18位身份证号码的输入可以采取下述方法之一: 1.数据区域设置为"文本"格式.2.首先输入一个英文单引号后再接着输 ...

  4. excel中输入身份证号不能够完整显示的解决

    在excel中如果输入的身份证号码不能够正确显示(excel对于输入超过11位的数字会以科学计数的表达方式来显示),一般有两种解决方法:① 右键单元格-设置单元格格式-设置为文本即可正常显示 ② 在单 ...

  5. 熊猫数据集_处理熊猫数据框中的列表值

    熊猫数据集 Have you ever dealt with a dataset that required you to work with list values? If so, you will ...

  6. python 数据框缺失值_Python:处理数据框中的缺失值

    python 数据框缺失值 介绍 (Introduction) In the last article we went through on how to find the missing value ...

  7. pubmedy安装不聊了_在PubMed基本检索框中输入immunology检索出的文献为1115106 篇,这是利用了PubMed哪一种检索技术?...

    参考答案如下 在PubMed基本检索框中输入immunology检索出的文献为1115106 篇,中输种检这是利用了PubMed哪一种检索技术? 基y检Which band became extrem ...

  8. w7系统计算机搜索无法搜索了,win7系统在搜索框中输入文字后无法搜索的详细教程...

    win7系统使用久了,好多网友反馈说win7系统在搜索框中输入文字后无法搜索的问题,非常不方便.有什么办法可以永久解决win7系统在搜索框中输入文字后无法搜索的问题,面对win7系统在搜索框中输入文字 ...

  9. html输出计算结果到文本框,在文本框中输入两个操作数和选择运算符后,在页面上显示输出结果...

    需求说明: 在文本框中输入两个操作数和选择运算符后,在页面上显示输出结果 实现思路: 单击"计算"按钮后,删除两个文本框左右两边的空格,删除空格后,判断输入框中是否都输入了内容,只 ...

最新文章

  1. 浅析Linux IO
  2. 「AI大牛」陶大程出任京东探索研究院院长!曾连续6年入选全球高被引科学家...
  3. mysql同时购买两种商品_SQL题1——查询所有购入商品为两种或两种以上的购物人记录...
  4. gzip与patch说明
  5. 干货收藏 | 如何优化前端性能?
  6. 基于SpringJDBC 实现关键功能-ClassMappings
  7. 【报错笔记】MAVEN pom.xml 报错解决方法
  8. [蓝桥杯][2018年第九届真题]日志统计(树状数组)
  9. Mycat - 数据库分库分表中间件,国内最活跃的、性能最好的开源数据库中间件
  10. python-opencv学习第二章
  11. (数论)逆元的线性算法
  12. onvif学习笔记5:onvif框架代码初步了解
  13. efuse 加密文件 linux,乐鑫关于“故障注入”和 “eFuse 保护”的安全建议 (CVE-2019-17391)...
  14. android activity 跳转与值
  15. java中rtsp转m3u8_直播源格式转换教程——rtmp/rtsp/http/m3u8!!
  16. Unity字体展示下载
  17. C语言读bin文件内容
  18. 从零开始SpringCloud Alibaba实战(47)——阿里开发手册泰山版学习笔记一 命名风格
  19. 辨别尸体死亡时间! [转]
  20. INDEX函数与MATCH函数嵌套使用技巧

热门文章

  1. Tom Mitchell、杨强、周志华共话算法未来,世界人工智能大会算法峰会报名中
  2. MapReduce1.x与MapReduce2.x差异
  3. ECS服务器指定实例规格最佳推荐
  4. 如何使用charles对Android Https进行抓包
  5. Charpter5 软件测试总结
  6. Linux下LAMP环境的安装之编译安装过程(五)
  7. 独立软件开发商进军SaaS注意八个问题,互联网营销
  8. 一波三折用OSD部署Vista中文企业版(下):SMS2003系列之九
  9. 如何设置SQL Server 全文搜索
  10. Kubernetes — 在 OpenStack 上使用 kubeadm 部署高可用集群