<script lanjuage="javaScript">

alert("验证开始") ;

/*

根据〖×××国家标准 GB 11643-1999〗中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。

地址码表示编码对象常住户口所在县(市、旗、区)的行政区划代码。

出生日期码表示编码对象出生的年、月、日,其中年份用四位数字表示,年、月、日之间不用分隔符。

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

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

出生日期计算方法。

15位的×××编码首先把出生年扩展为4位,简单的就是增加一个19或18,这样就包含了所有1800-1999年出生的人;

2000年后出生的肯定都是18位的了没有这个烦恼,至于1800年前出生的,那啥那时应该还没×××号这个东东,⊙﹏⊙b汗...

下面是正则表达式:

出生日期1800-2099 (18|19|20)?\d{2}(0[1-9]|1[12])(0[1-9]|[12]\d|3[01])

×××正则表达式 /^\d{6}(18|19|20)?\d{2}(0[1-9]|1[12])(0[1-9]|[12]\d|3[01])\d{3}(\d|X)$/i

15位校验规则 6位地址编码+6位出生日期+3位顺序号

18位校验规则 6位地址编码+8位出生日期+3位顺序号+1位校验位

校验位规则 公式:∑(ai×Wi)(mod 11)……………………………………(1)

公式(1)中:

i----表示号码字符从由至左包括校验码在内的位置序号;

ai----表示第i位置上的号码字符值;

Wi----示第i位置上的加权因子,其数值依据公式Wi=2^(n-1)(mod 11)计算得出。

i 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1

Wi 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 1

*/

//×××号合法性验证

//支持15位和18位×××号

//支持地址编码、出生日期、校验位验证

function IdentityCodeValid(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:"澳门",91:"国外 "};

var tip = "";

var pass= true;

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

tip = "×××号格式错误";

pass = false;

}

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

tip = "地址编码错误";

pass = false;

}

else{

//18位×××需要验证最后一位校验位

if(code.length == 18){

code = code.split('');

//∑(ai×Wi)(mod 11)

//加权因子

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;

var ai = 0;

var wi = 0;

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

{

ai = code[i];

wi = factor[i];

sum += ai * wi;

}

var last = parity[sum % 11];

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

tip = "校验位错误";

pass =false;

}

}

}

if(!pass) alert(tip);

alert(pass);

return pass;

}

</script>

转载于:https://blog.51cto.com/haigejava/1315130

【转】×××精确校验JS相关推荐

  1. js实现身份证精确校验

    之前我们前端对身份证的校验,都是用的正则校验 legalTex = /^\d{6}(18|19|20)\d{2}(0\d|10|11|12)([0-2]\d|30|31)\d{3}(\d|X|x)$/ ...

  2. 在 Notepad++ 运行 Closure Linter 来校验JS代码

    在这篇blog之前写过同类的校验JS代码工具:JavaScript Lint 的在 Notepad++ 中如何使用,google 提供的 Closure Linter 给了我们更多的工具选择. Clo ...

  3. vue 身份证校验js及其***显示

    校验js const idCardRule = (rule, value, callback) => {let reg = /^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3 ...

  4. js 身份证精确校验(支持15位和18位身份证号 )

    js 校验方法 //身份证号合法性验证 //支持15位和18位身份证号 //支持地址编码.出生日期.校验位验证 function IdentityCode(code){var city={11:&qu ...

  5. 正则表达式纯数字校验 JS

    正则表达式纯数字校验 直接看代码测试 通过: <!DOCTYPE html> <html> <head><title>Demo Example</ ...

  6. 帆软日期控件变灰_数据分析插件FineReport中日期控件如何校验JS

    效果查看 分页预览模板,选择开始时间和结束时间,使这两个日期之间相差超过15天,就会弹出上述对话框. 注:上述js代码在火狐,谷歌IE9等浏览器下没有问题,但是在IE8以及IE8以下的ie浏览器版本中 ...

  7. 前端身份证号码校验js代码

    今天把项目前端的身份证号码从最初的只是校验长度改为只允许正规的号码,具体内容如下 功能主要校验  年月日 地址  格式  以及最后一位的校验 var code="123132132121&q ...

  8. 注册表单校验 js java,JavaScript表单验证完美代码

    用原生JS写一个简单的表单验证 首先,是html部分 新用户注册 基本信息 用户名: 请输入至少3位的用户名 密码: 请输入4到8位的密码 确认密码: 请再输入一遍密码 手机号码: 请输入11位手机号 ...

  9. 身份证真实性校验js、mini ui身份证长度正则验证

    身份证号码真实性校验 <input type="text" value="请输入身份证号" id="cards" > <b ...

最新文章

  1. linux 6.4 图形界面,为CentOS 6.4安装图形界面并用VNC远程连接
  2. STM32启动过程分析
  3. JavaScript实现最小公倍数LCM算法(附完整源码)
  4. urllib库parse模块的使用
  5. React开发(269):事件的绑定-addEventListener
  6. linq 动态拼接where条件 类似 T_SQL And Or
  7. 宏正ATEN发行最新款双滑轨PS/2-USB双界面LCD控制端
  8. console.log、toString方法与js判断变量类型
  9. 饿了么美团外卖返利程序对接公众号发单机器人分销系统返利源码
  10. Lattice Radiant烧写程序
  11. C# graphics方法
  12. 爬取小鸟高清美女壁纸
  13. IT人转型的终极目标
  14. BIOS/固件设置中禁用Intel VT-x
  15. 搭建LNMP平台加NFS文件共享部署wordpress博客
  16. [计算机网络] 拥塞控制
  17. chirp和tone burst信号激励
  18. 【论文笔记之 MDF】Multidelay Block Frequency Domain Adaptive Filter
  19. Hibernate Transformers之三种结果转换说明
  20. 桂微盘 开启6元微交易投资新时代

热门文章

  1. AIR 配置文件(*-app.xml)说明(转)
  2. 飞象求职学python_用Python制作markdown编辑器
  3. Nvidia的CUDA库现在恢复使用了
  4. XamarinEssentials教程清空键值
  5. GRDB自定义的纯函数
  6. dr.web for android version 9,DrWeb安全防护
  7. java 判断水仙花_Java实现判断水仙花数
  8. mysql的远程链接工具_Navicat远程链接mysql-8数据库具体操作
  9. layui 导航收缩代码_pycharm的十个小技巧,让你写代码效率翻倍
  10. 解决ubuntu中遇到“E:Unable to locate package rar” 的问题