<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>身份证号码验证-支持新的带x身份证</title>
<script language="javascript">
//身份证号码验证-支持新的带x身份证
//
function check_ID_card() {
var ID_card = document.all('idcard').value;
var IDcardLen = ID_card.length;
var fMod = 11; //身份证算法求模关键值
var oldIDLen = 15; //旧身份证长度
var newIDLen = 18; //新身份证长度
var yearFlag = "19"; //新身份证年份标志
var Wi = new Array(); //位权值数组
var varArray = new Array();
var birthday = ''; //生日
var checkDigit = ''; //校验位
var numSum = 0; //数字和
var regStr = /^\d{15,17}([\dxX]{1})?$/;
if ((IDcardLen != 15) && (IDcardLen != 18)) {
alert("身份证长度必须为15或18位.");
return false;
}
if(!regStr.test(ID_card)){
alert("身份证号码必须为数字(18位的新身份证最后一位可以是x).");
return false;
}
if(IDcardLen == 15){
birthday = "19" + ID_card.substring(6,8) + "-" + ID_card.substring(8,10) + "-" + ID_card.substring(10,12);
}else{
birthday = ID_card.substring(6,10) + "-" + ID_card.substring(10,12) + "-" + ID_card.substring(12,14);
}
if(!isDate(birthday)){
alert("身份证号码中的日期格式不对(第6-12位).");
return false;
}
if(IDcardLen == 18){
for(var i=0;i<newIDLen-1;i++){
var k = Math.pow(2,newIDLen-1-i);
Wi[i] = k % 11;
}
for(var i=0;i<IDcardLen-1;i++){
varArray[i] = ID_card.charAt(i);
varArray[i] = varArray[i]*Wi[i];
numSum = numSum + varArray[i];
}
checkDigit = 12 - numSum % 11;
switch (checkDigit) {
case 10:
checkDigit = 'X';
break;
case 11:
checkDigit = 0;
break;
case 12:
checkDigit = 1;
break;
}
// check last digit
if (ID_card.charAt(17).toUpperCase() != checkDigit) {
alert("身份证最后一位校验码不对,应该为"+checkDigit+".");
return false;
}
}
alert(ID_card+"为正确的身份证号码.");
return true;
}
//日期格式验证(yyyy-mm-dd,其中月,日可以只有一位)
//
function isDate(dateStr){
var B, D=0;
// Split into $1 $2 $3
B = /^(\d{4})-(\d|\d\d)-(\d|\d\d)$/.test(dateStr);
if (B) with (RegExp){
// $1 $2 $3 = Y M D
D = new Date($1, $2-1, $3);
// test Y M D valid
B = ((D.getMonth()==$2-1) && (D.getFullYear()==$1));
}
return B;
}
</script>
</head>
<body>
<form name='frm' onSubmit="check_ID_card();return false;">
<center>
身份证号码:<input type='text' name='idcard' value="">
<input type=submit value='验证'>
</center>
</form>
</body>
</html>
分享到:
相关推荐
最完善的身份证号码合法性校验Java算法,适合Android平台,可以直接拿来在项目中使用,正则表达式。
中国居民身份证校验码算法如下: 将身份证号码前面的17位数分别乘以不同的系数。从第一位到第十七位的系数分别为:7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2。 将这17位数字和系数相乘的结果相加。用加...
通过js验证身份证是否有效的js以及身份证的验证算法详解;包括详细的js代码
身份证号码验证算法 (一) 18身份证号码的结构 公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成。 排列顺序从左至右依次为:六位数字地址码 + 八位数字出生日期码 + 三位数字顺序码 + 一位校验码。...
该函数是支持Oracle环境下的对身份照进行校验的函数,它是按照身份照计算算法去校验的,能够精准的判断出身份照是否合法,通过返回值为1:表示为正确的身份证,返回值为0表示为错误的身份证
JAVA身份证号码验证工具,通过身份证号码生成规则,能验证15位、18位身份证号码,必备验证方式
身份证号码验证示例源码 <br>中国身份证号码验证,支持15,18位,可验证成功90%的身份证号 利用正则进行身份证算法验证 <br>非常不错
公民身份号码是由17位数字码和1位校验码组成。排列顺序从左至右分别为:6位地址码,8位出生日期码,3位顺序码和1位校验码。 地址码(身份证地址码对照表见...身份证号码解密|身份证尾数校验码算法|ID card information
身份证验证javascript验证方法,支持18位和15位身份证校验,算法简单。支持x校验位
java实现的18位身份证格式验证算法
用正则表达式校验身份证号码的算法,以及全国各地身份证号码的分配情况
这是一个网页源码,身份证的验证。利用JavaScript制作的。
身份证校验码算法: 设18位身份证号序列从左到右为: 引用 a[0], a[1], a[2], a[3], …, a[16], a[17] 其中a[i]表示第i位数字,i=0,1,2,…,17,如果最后一位(校验位)是X,则a[17]=10 每一位被赋予一个“权值”,...
身份证号校验器是一个可以用来验证身份证号码是否有效的验证工具。 特点: 1、支持批量输入验证 2、支持从数据库读取验证 3、支持SQL SERVER 4、支持ORACLE 根据〖中华人民共和国国家标准 GB 11643-1999〗中有关...
18位身份证号码验证算法.doc
最新js算法,验证身份证有效性、区域等(含减肥版)
JS常用工具函数(压缩包中含有MD文件可自行查看)--包含:通用格式化时间、字符串验证-验证邮箱、手机号、电话号码、url地址、严格校验身份证号码,判断数据类型-是否是字符串、数字、Boolean、函数、对象、数组...
根据中国公民身份证号码算法 实现验证身份证号码合法性 已实现java类函数 可直接调用即可 非常方便实用
C#实现的18位身份证格式验证算法.txt
传统拜占庭一致性中常见的中心化和去中心化算法在解决合法性验证的过程中存在容错率低、消息复杂度高等问题,为此,提出新的区块链一致性算法,引入两阶段提交和法定人数投票的过程,利用区块链协议的分布式总账特点...