javascript版本的 身份证号码的合法性校验
/**
* 检验身份证号码
* 15位:ddddddyymmddxxp
* 18位:ddddddyyyymmddxxxy
* @param cardNum 身份证号码 string
* @param needAlertError 是否需要弹出错误提示信息
* @return true/false
*/
function checkIDCardNumber(cardNum, needAlertError) {
//默认不弹出错误提示信息
needAlertError = !!needAlertError || false;
if(typeof cardNum != 'string') {
if(needAlertError) {
alert("参数cardNum格式错误");
}
return false;
}
//身份证号码长度为15位或18位
if(cardNum.length!=15 && cardNum.length!=18) {
if(needAlertError) {
alert("身份证号码位数不对");
}
return false;
}
//15位身份证号码全为数字,18位也全为数字或17位数字,并以字符X结尾
if(!/^\d{15}$|(^\d{17}[0-9Xx]$)/.test(cardNum)) {
if(needAlertError) {
alert("身份证号码含有非法字符");
}
return false;
}
// 地址编码
var province = {
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(!province[cardNum.substring(0, 2)]) {
if(needAlertError) {
alert("身份证号码地区非法");
}
return false;
}
//出生日期
var birthday = cardNum.length==15 ? ("19" + cardNum.substring(6, 12)) : cardNum.substring(6, 14);
if(!/(19)|(20)\d{6}/.test(birthday)) {
if(needAlertError) {
alert("身份证号码出生日期超出范围或格式错误");
}
return false;
}
var year = parseInt(birthday.substring(0, 4));
var month = parseInt(birthday.substring(4, 6)) - 1;
var day = parseInt(birthday.substring(6));
var newBirthday = new Date(year, month, day);
var formatedBirthday = "" + newBirthday.getFullYear();
formatedBirthday += (newBirthday.getMonth()<9 ? "0" : "") + (newBirthday.getMonth() + 1);
formatedBirthday += (newBirthday.getDate()<10 ? "0" : "") + newBirthday.getDate();
//身份证中如包含如下格式的日期将不能通过校验:20150230、20150735
if(birthday != formatedBirthday) {
if(needAlertError) {
alert("身份证号码出生日期超出范围或格式错误");
}
return false;
}
//校验位 ∑(ai×Wi)(mod 11)
if(cardNum.length == 18) {
//加权因子
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 += cardNum[i] * factor[i];
}
if(parity[sum % 11] != cardNum[17]){
if(needAlertError) {
alert("身份证号码校验位错误");
}
return false;
}
}
return true;
}

身份证号码的合法性校验相关推荐

  1. 身份证号码的严格校验(非正则)

    文章目录 前言 序言 一.身份证号码介绍 1.身份证号码组成 2.省份证号码中的名词解释 1.区域代码(地址码) 2.生日 3.顺序码 4.校验码 总结 二.校验码计算 1.公式拆解 2.运算 三.实 ...

  2. 身份证号码编码方法及校验算法

    身份证号码编码方法及校验算法 1 身份证号码的字段构成: 地址码 身份证前六位,表示户口所在县(市.旗.区)的行政区划代码. 生日码 身份证第七至第十四位,表示出生的年.月.日. 顺序码 身份证十五到 ...

  3. java数据算法,验证身份证号码的合法性

    首先,在做验证之前,要了解身份证验证号码的规则. 1.号码的结构 :公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成.排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺 ...

  4. Javascript验证表单身份证号码的合法性

    文章出处: http://dengo.org/archives/941 不少大的游戏注册时都要输入身份证号码,来限制未成年人,配合所谓的反沉迷系统,账号注册环节注重的是快捷,所以身份证验证都不是真实的 ...

  5. vue+element 身份证号码以及有效性校验 适用 15位 或18位

    data () {let idCardValidity = (rule, code, callback) => {var city = { 11: "北京", 12: &qu ...

  6. 身份证号码填写合法性验证的小方法,参数就是身份证号码

    LBCP.ZHXZ.CGJ.idCardjiaoyan = function(idCard){     var Wi = [ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, ...

  7. 基于可视化结构的身份证号码校验系统-树莓派实现

    基于可视化结构的身份证号码校验系统 摘要: 本作品是一个通用的身份证号码校验系统,目前已经尝试在Linux和Windows系统下运行,结果均可达到理想效果.系统通过运用基础GUI库tkinter创建系 ...

  8. Hive进行身份证合法性校验

    身份证号码格式校验是很多系统在数据集成时的一个常见需求,我们以18位身份证为例,使用一个Hive查询实现身份证号码的合法性验证.该查询结果是所有不合规的身份证号码.按以下身份证号码的定义规则建立查询. ...

  9. 身份证号码的编码规则及校验

    前言 本文内容适用于二代身份证,如无特殊说明,本文中所说的身份证皆指二代身份证. 笔者目前使用的jdk版本是1.6.0_29,Eclipse版本是Juno Release,Build id 20120 ...

最新文章

  1. nginx的小总结(二)
  2. 2012matlab aerospace,Matlab 2012安装图解
  3. codeforces 808 E. Selling Souvenirs (dp+二分+思维)
  4. gbdt 算法比随机森林容易_用Python实现随机森林算法
  5. 《Java和Android开发实战详解》——1.2节Java基础知识
  6. 【SQL 提示 之二】index_ss Index Skip Hint
  7. 5月书讯丨​​《联邦学习》带队,10新书给你全方位的技能提升
  8. vim编辑器永久显示行号
  9. 纯js实现下载功能【附上js代码】
  10. 16个PLC入门基础知识,大学生学PLC就跟玩一样
  11. 泊松分布(一种离散分布)
  12. linux桌面图标恢复,修复桌面白图标的教程
  13. mysql stuff函数_mysql   自定义 stuff
  14. 基于PHP+MySQL实现注册和登录功能
  15. 华为Atlas 500智能小站如何使能边缘计算?
  16. 回旋图形c语言编程,回旋形构成形式解析与应用研究.docx
  17. 视频教程-Excel玩转财务管理-Office/WPS
  18. 第3集丨通往圣贤之路
  19. 偏向锁、轻量级锁、重量级锁的区别和解析
  20. VBA基础语法学习代码

热门文章

  1. cam350菜单怎么切换成中文_CAM350改变有关设置
  2. 网络骗局环环相扣 钓鱼攻击出现新方式
  3. JEDEC标准(JESD216)S FDP对串行Flash在系统中的应用
  4. 腾讯:建造“通天塔”的“帝企鹅”
  5. 图像去噪之 Noise2Noise 和 Noise2Void
  6. C盘空间不足怎么办,如何让C盘获得更多空间
  7. 如何实施敏捷,第一步从哪里开始?
  8. 深度学习模型——AlexNet
  9. Oracle 数据库中 同义词的意思
  10. AutoHotKey使用技巧