原文链接:http://gongwen.sinaapp.com/article-126-cmd
这个其实不难,在网上多找一下总会有意外收获的.但是工欲善其事,必先利其器.我们需要了解一下身份证号的规则,知己知彼百战不殆。
身份证号有15位和18位长度两种,15位的时候,都是数字,但是18位长度的时候可能有校验位(X),所以只校验数字是不够的了。
另外身份证号可以看出一个人的年龄,出生所在地(身份证所在地?)等等,这些对我们来讲都是有用的数据。
/*
Author:yufulong
Blog:http://www.xiaoxiaozi.com
*/
var vcity={ 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:"国外"
};
checkCard = function()
{
var card = document.getElementById('card_no').value;
//是否为空
if(card === '')
{
alert('请输入身份证号,身份证号不能为空');
document.getElementById('card_no').focus;
return false;
}
//校验长度,类型
if(isCardNo(card) === false)
{
alert('您输入的身份证号码不正确,请重新输入');
document.getElementById('card_no').focus;
return false;
}
//检查省份
if(checkProvince(card) === false)
{
alert('您输入的身份证号码不正确,请重新输入');
document.getElementById('card_no').focus;
return false;
}
//校验生日
if(checkBirthday(card) === false)
{
alert('您输入的身份证号码生日不正确,请重新输入');
document.getElementById('card_no').focus();
return false;
}
//检验位的检测
if(checkParity(card) === false)
{
alert('您的身份证校验位不正确,请重新输入');
document.getElementById('card_no').focus();
return false;
}
alert('OK');
return true;
};
//检查号码是否符合规范,包括长度,类型
isCardNo = function(card)
{
//身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X
var reg = /(^\d{15}$)|(^\d{17}(\d|X)$)/;
if(reg.test(card) === false)
{
alert("demo");
return false;
}
return true;
};
//取身份证前两位,校验省份
checkProvince = function(card)
{
var province = card.substr(0,2);
if(vcity[province] == undefined)
{
return false;
}
return true;
};
//检查生日是否正确
checkBirthday = function(card)
{
var len = card.length;
//身份证15位时,次序为省(3位)市(3位)年(2位)月(2位)日(2位)校验位(3位),皆为数字
if(len == '15')
{
var re_fifteen = /^(\d{6})(\d{2})(\d{2})(\d{2})(\d{3})$/;
var arr_data = card.match(re_fifteen);
var year = arr_data[2];
var month = arr_data[3];
var day = arr_data[4];
var birthday = new Date('19'+year+'/'+month+'/'+day);
return verifyBirthday('19'+year,month,day,birthday);
}
//身份证18位时,次序为省(3位)市(3位)年(4位)月(2位)日(2位)校验位(4位),校验位末尾可能为X
if(len == '18')
{
var re_eighteen = /^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/;
var arr_data = card.match(re_eighteen);
var year = arr_data[2];
var month = arr_data[3];
var day = arr_data[4];
var birthday = new Date(year+'/'+month+'/'+day);
return verifyBirthday(year,month,day,birthday);
}
return false;
};
//校验日期
verifyBirthday = function(year,month,day,birthday)
{
var now = new Date();
var now_year = now.getFullYear();
//年月日是否合理
if(birthday.getFullYear() == year && (birthday.getMonth() + 1) == month && birthday.getDate() == day)
{
//判断年份的范围(3岁到100岁之间)
var time = now_year - year;
if(time >= 3 && time <= 100)
{
return true;
}
return false;
}
return false;
};
//校验位的检测
checkParity = function(card)
{
//15位转18位
card = changeFivteenToEighteen(card);
var len = card.length;
if(len == '18')
{
var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
var arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
var cardTemp = 0, i, valnum;
for(i = 0; i < 17; i ++)
{
cardTemp += card.substr(i, 1) * arrInt[i];
}
valnum = arrCh[cardTemp % 11];
if (valnum == card.substr(17, 1))
{
return true;
}
return false;
}
return false;
};
//15位转18位身份证号
changeFivteenToEighteen = function(card)
{
if(card.length == '15')
{
var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
var arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
var cardTemp = 0, i;
card = card.substr(0, 6) + '19' + card.substr(6, card.length - 6);
for(i = 0; i < 17; i ++)
{
cardTemp += card.substr(i, 1) * arrInt[i];
}
card += arrCh[cardTemp % 11];
return card;
}
return card;
};
分享到:
相关推荐
### 正则表达式校验身份证号码 #### 知识点概述 身份证号码在中国大陆具有唯一性,用于标识每一个公民的身份。身份证号码分为15位和18位两种格式,其中18位号码是在15位基础上增加了一个4位出生年份以及一位校验码...
JavaScript正则表达式验证身份证号码是否合法(两种方法)分析 正则表达式(Regular Expression)是一种描述字符模式的对象。下面,我们将通过JavaScript正则表达式来验证身份证号码是否合法。 正则表达式的基本...
js+正则校验身份证号,包括地区、年份、月份、日期、及最主要的--末尾算法--校验
接下来我们通过一个具体的函数来实现身份证号码的验证逻辑,该函数不仅包含了上述正则表达式的使用,还增加了对出生日期的验证以及18位身份证号码校验码的计算。 ```javascript function isIdCardNo(num) { num = ...
js正则表达式校验数字、email、身份证号等
在用户注册页面有些需求要求的比较严格,需要对身份证验证是否合法,通过此功能严格此系统软件,从而过滤到很多水客。此篇文章主要是讲解如何用javascript正则表达式验证身份证号码是否合法,需要的朋友可以参考下
1、只针对18为身份证号码进行校验,现在15位的应该很少了, 2、不区分xX大小写, 3、出生年份1900-2099,每月的天数也进行相关验证(考虑的闰月的情况), 4、校验规则详见,这个写的比较详细和清楚,相信看过后都可以...
// 身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X var reg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/; if(reg.test(card) === false) { alert(...
这个正则表达式会检查身份证号码的长度、地区码、年份(只考虑1900年以后)、月份和日期的合法性,以及最后一位的校验码。其中,`[\dXx]` 表示校验码可以是0-9的任何数字或字母“X/x”。 验证身份证号码的完整...
### H5校验身份证号码知识点解析 #### 一、背景介绍 随着互联网技术的发展,越来越多的应用场景需要对用户的个人信息进行验证,其中身份证号码验证是非常常见的一种。身份证号码在中国大陆包括两种格式:15位和18位...
本资源包“JS input正则验证大全”主要聚焦于使用JavaScript进行输入框(input)的各种类型的数据验证,包括英文、中文、邮箱、手机号、银行卡和身份证等常见字段的正则校验规则。以下是对这些知识点的详细说明: 1...
本文就将介绍一种使用正则表达式截取并加密身份证号码的方法,同时,还将解释身份证号码的结构组成和通过正则表达式验证身份证号码合法性的基本原理。 首先,我们来了解一下身份证号码的组成与结构。根据国家标准,...
本文将详细介绍如何使用JavaScript中的正则表达式来进行身份证号码的有效性验证。 #### 二、身份证号码构成 中国居民身份证号码由18位数字组成,具体结构如下: 1. **地址码**(第1至6位):表示编码对象常住户口...
4. 校验码:最后1位,可能是数字或大写的X,用于校验身份证号码的正确性。 在JavaScript中,我们可以通过编写正则表达式来匹配这种格式。一个基本的身份证号正则表达式可能如下: ```javascript /^\d{6}(18|19|20)...
idCardNoUtil 对象提供了多种方法,例如 getParityBit 函数用于计算身份证号码的校验码、checkAddressCode 函数用于验证地址码、checkBirthDayCode 函数用于验证生日等。 kettle 提供了多种功能强大的函数和对象来...
在了解JavaScript正则表达式验证身份证号码是否合法前,我们首先需要了解身份证号码的基本构成。中国大陆的身份证号码,也就是公民身份号码,由18位数字组成。前六位是地址码,接下来的八位是出生日期码,然后是三位...
这个压缩包文件“js身份证号码获取性别、出生日期、籍贯省市.zip”包含了一个JavaScript方法,用于从身份证号码中提取这些关键数据。下面我们将详细探讨如何通过身份证号码获取这些信息以及背后的逻辑。 首先,中国...
提供的"js校验身份证号"和"js校验银行卡号"文件可能包含了这些更复杂的实现。通过学习和理解这些代码,开发者可以更好地实现身份证号和银行卡号的验证功能,提高用户体验,同时确保数据的安全性和准确性。
本文将详细介绍如何使用`jQuery.validate`插件来扩展身份证号码的校验功能。 #### jQuery.validate 插件简介 `jQuery.validate`是一个非常强大的表单验证插件,它可以帮助开发者快速实现表单验证逻辑,减少重复...