`

JavaScript验证身份证

阅读更多
/**
*判断身份证号码格式函数
*公民身份号码是特征组合码,
*排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码
*/
function isChinaIDCard(StrNo){
StrNo = StrNo.toString();
if(StrNo.length == 15){
if(!isValidDate("19"+StrNo.substr(6,2),StrNo.substr(8,2),StrNo.substr(10,2))){return false;}
}else if(StrNo.length == 18){
if (!isValidDate(StrNo.substr(6,4),StrNo.substr(10,2),StrNo.substr(12,2))){return false;}
}else{
alert("输入的身份证号码必须为15位或者18位!");
return false;
}

if (StrNo.length==18)
{
var a,b,c
if (!isNumber(StrNo.substr(0,17))){alert("身份证号码错误,前17位不能含有英文字母!");return false;}
a=parseInt(StrNo.substr(0,1))*7+parseInt(StrNo.substr(1,1))*9+parseInt(StrNo.substr(2,1))*10;
a=a+parseInt(StrNo.substr(3,1))*5+parseInt(StrNo.substr(4,1))*8+parseInt(StrNo.substr(5,1))*4;
a=a+parseInt(StrNo.substr(6,1))*2+parseInt(StrNo.substr(7,1))*1+parseInt(StrNo.substr(8,1))*6;
a=a+parseInt(StrNo.substr(9,1))*3+parseInt(StrNo.substr(10,1))*7+parseInt(StrNo.substr(11,1))*9;
a=a+parseInt(StrNo.substr(12,1))*10+parseInt(StrNo.substr(13,1))*5+parseInt(StrNo.substr(14,1))*8;
a=a+parseInt(StrNo.substr(15,1))*4+parseInt(StrNo.substr(16,1))*2;
b=a%11;
if (b==2) //最后一位为校验位
{
c=StrNo.substr(17,1).toUpperCase(); //转为大写X
}
else
{
c=parseInt(StrNo.substr(17,1));
}
switch(b)
{
case 0: if ( c!=1 ) {alert("身份证好号码校验位错:最后一位应该为:1");return false;}break;
case 1: if ( c!=0 ) {alert("身份证好号码校验位错:最后一位应该为:0");return false;}break;
case 2: if ( c!="X") {alert("身份证好号码校验位错:最后一位应该为:X");return false;}break;
case 3: if ( c!=9 ) {alert("身份证好号码校验位错:最后一位应该为:9");return false;}break;
case 4: if ( c!=8 ) {alert("身份证好号码校验位错:最后一位应该为:8");return false;}break;
case 5: if ( c!=7 ) {alert("身份证好号码校验位错:最后一位应该为:7");return false;}break;
case 6: if ( c!=6 ) {alert("身份证好号码校验位错:最后一位应该为:6");return false;}break;
case 7: if ( c!=5 ) {alert("身份证好号码校验位错:最后一位应该为:5");return false;}break;
case 8: if ( c!=4 ) {alert("身份证好号码校验位错:最后一位应该为:4");return false;}break;
case 9: if ( c!=3 ) {alert("身份证好号码校验位错:最后一位应该为:3");return false;}break;
case 10: if ( c!=2 ){alert("身份证好号码校验位错:最后一位应该为:2");return false;}
}
} else {//15位身份证号
if (!isNumber(StrNo)) {alert("身份证号码错误,前15位不能含有英文字母!");return false;}
}
return true;

}

function isValidDate(iY, iM, iD) {
if (iY>2200 || iY<1900 || !isNumber(iY)){
alert("输入身份证号,年度"+iY+"非法!");
return false;
}
if (iM>12 || iM<=0 || !isNumber(iM)){
alert("输入身份证号,月份"+iM+"非法!");
return false;
}
if (iD>31 || iD<=0 || !isNumber(iD)){
alert("输入身份证号,日期"+iD+"非法!");
return false;
}
return true;
}
/**
* 验证是不是数字
*/
function isNumber(oNum) {
if(!oNum) return false;
var strP=/^\d+(\.\d+)?$/;
if(!strP.test(oNum)) return false;
try{
if(parseFloat(oNum)!=oNum) return false;
}
catch(ex)
{
return false;
}
return true;
}


<wbr>---身份证号码的规则</wbr><wbr></wbr>
<wbr style="line-height: 1.3em; "><br><font color="#ff00ff" face="幼圆" style="font-size: small; line-height: 1.3em; "><b><wbr>1、15位身份证号码组成:</wbr></b><wbr></wbr></font><wbr style="line-height: 1.3em; "><br><font color="#ff00ff" face="幼圆" style="font-size: small; line-height: 1.3em; "><b><wbr>ddddddyymmddxxs共15位,其中:</wbr></b><wbr></wbr></font><wbr style="line-height: 1.3em; "><br><font color="#ff00ff" face="幼圆" style="font-size: small; line-height: 1.3em; "><b><wbr>dddddd为6位的地方代码,根据这6位可以获得该身份证号所在地。</wbr></b><wbr></wbr></font><wbr style="line-height: 1.3em; "><br><font color="#ff00ff" face="幼圆" style="font-size: small; line-height: 1.3em; "><b><wbr>yy为2位的年份代码,是身份证持有人的出身年份。</wbr></b><wbr></wbr></font><wbr style="line-height: 1.3em; "><br><font color="#ff00ff" face="幼圆" style="font-size: small; line-height: 1.3em; "><b><wbr>mm为2位的月份代码,是身份证持有人的出身月份。</wbr></b><wbr></wbr></font><wbr style="line-height: 1.3em; "><br><font color="#ff00ff" face="幼圆" style="font-size: small; line-height: 1.3em; "><b><wbr>dd为2位的日期代码,是身份证持有人的出身日。</wbr></b><wbr></wbr></font><wbr style="line-height: 1.3em; "><br><font color="#ff00ff" face="幼圆" style="font-size: small; line-height: 1.3em; "><b><wbr>这6位在一起组成了身份证持有人的出生日期。</wbr></b><wbr></wbr></font><wbr style="line-height: 1.3em; "><br><font color="#ff00ff" face="幼圆" style="font-size: small; line-height: 1.3em; "><b><wbr>xx为2位的顺序码,这个是随机数。</wbr></b><wbr></wbr></font><wbr style="line-height: 1.3em; "><br><font color="#ff00ff" face="幼圆" style="font-size: small; line-height: 1.3em; "><b><wbr>s为1位的性别代码,奇数代表男性,偶数代表女性。</wbr></b><wbr></wbr></font><wbr style="line-height: 1.3em; "><br><br><font face="幼圆" style="font-size: small; line-height: 1.3em; "><b><wbr>2、18位身份证号码组成:</wbr></b><wbr></wbr></font><wbr style="line-height: 1.3em; "><br><font color="#ff00ff" face="幼圆" style="font-size: small; line-height: 1.3em; "><b><wbr>ddddddyyyymmddxxsp共18位,其中:</wbr></b><wbr></wbr></font><wbr style="line-height: 1.3em; "><br><font color="#ff00ff" face="幼圆" style="font-size: small; line-height: 1.3em; "><b><wbr>其他部分都和15位的相同。年份代码由原来的2位升级到4位。最后一位为校验位。</wbr></b><wbr></wbr></font><wbr style="line-height: 1.3em; "><br><font color="#0000ff" face="幼圆" style="font-size: small; line-height: 1.3em; "><b><wbr>校验规则是:</wbr></b><wbr></wbr></font><wbr style="line-height: 1.3em; "><font face="幼圆" style="font-size: small; line-height: 1.3em; "><br><font color="#0000ff" style="line-height: 1.3em; "><b><wbr>(1)十七位数字本体码加权求和公式<br>S = Sum(Ai * Wi), i = 0, ... , 16 ,先对前17位数字的权求和<br>Ai:表示第i位置上的身份证号码数字值<br>Wi:表示第i位置上的加权因子<br>Wi: 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2<br></wbr></b><wbr></wbr></font><wbr style="line-height: 1.3em; "></wbr></font><wbr style="line-height: 1.3em; "><font color="#0000ff" face="幼圆" style="font-size: small; line-height: 1.3em; "><b><wbr>(2)计算模<br>Y = mod(S, 11)<br></wbr></b><wbr></wbr></font><wbr style="line-height: 1.3em; "><font face="幼圆" style="font-size: small; line-height: 1.3em; "><b><wbr><font color="#0000ff" style="line-height: 1.3em; ">(3)通过模得到对应的校验码<br>Y: 0 1 2 3 4 5 6 7 8 9 10<br>校验码: 1 0 X 9 8 7 6 5 4 3 2</font><wbr style="line-height: 1.3em; "><br></wbr></wbr></b><wbr></wbr></font><wbr style="line-height: 1.3em; "><br><font face="幼圆" style="font-size: small; line-height: 1.3em; "><b><wbr>也就是说,如果得到余数为1则最后的校验位p应该为对应的0.如果校验位不是,则该身份证号码不正确。</wbr></b></font></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
分享到:
评论

相关推荐

    用JavaScript验证身份证号

    * 身份证15位编码规则:dddddd... * 验证位 Y = [ 1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2 ] * 校验位计算公式:Y_P = mod( ∑(Ai×Wi),11 ) * i为身份证号码从右往左数的 2...18 位; Y_P为脚丫校验码所在校验码数组位置

    javaScript 验证身份证号是否正确,并能获取户口所在地。

    javaScript实现验证身份证是否正确,并能获取户口所在地。 调用方式: 引入idCard.js var msg = idCard.checkIdCard(身份证号); msg为 "正确" 时验证正确,否则返回错误信息 身份证正确时调用 var address = ...

    javascript验证身份证号

    JavaScript验证身份证号码是前端开发中常见的需求,因为身份证号码作为重要的个人身份标识,在用户注册等场景中需要进行准确的验证以确保信息的正确性。身份证号码的标准格式由18位数字组成,包括地址码、出生日期码...

    验证身份证号码有效性的js

    要使用JavaScript验证身份证号码,我们首先需要定义一个函数,例如`isValidIDCard`,接收一个身份证号码作为参数。这个函数的核心就是校验码的计算过程。以下是一个简单的实现: ```javascript function ...

    超精准的javascript验证身份证号的具体实现方法

    通过JavaScript验证身份证号码是一种常见的前端验证手段,除了确认身份证号码的格式正确外,通常还会对出生日期是否合法以及身份证号码中的性别信息进行验证。实现一个精准的身份证号码验证器需要细致地处理各种逻辑...

    javascript身份证号码验证-支持15位和18位带x身份证

    验证身份证号码的完整JavaScript函数可能如下所示: ```javascript function isIdCard(id) { var regex = /^[1-9]\d{5}(18|19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12][0-9]|3[01])\d{3}[\dXx]$/; if (!regex.test...

    javascript验证身份证完全方法具体实现

    下面这段代码完全实现了判断身份证是否合格.传入身份证号码就行了。包括了公安部的算法。下面的是用Ext实现的。但是基于javascript的语法居多,基本都可以用

    js验证身份证格式

    本压缩包提供的资源“js验证身份证”包含了一个JavaScript函数,用于检查输入的身份证号码是否符合15位或18位身份证号码的规则。 首先,我们来了解一下中国身份证的基本结构。15位身份证号码在1999年后已经被18位...

    身份证号码验证程序 javascript验证的html文件

    在这个例子中,JavaScript代码负责处理用户的输入,进行身份证号码的有效性验证。 3. **身份证号码验证规则**:中国的身份证号码由18位数字组成,包括地区码、出生日期码、顺序码和校验码。验证时需检查: - 地区...

    javascript身份证验证

    ### JavaScript身份证验证详解 在日常的web开发中,身份证验证是一项常见的需求,尤其是在涉及用户信息登记、身份认证等场景下。本文将详细解析一个基于JavaScript的身份证验证算法,旨在帮助开发者理解和实现...

    javascript 身份证号码格式验证

    运用javascript进行身份证号码格式验证。

    JS验证身份证及获取地区功能示例

    在JavaScript(JS)中,身份证验证和获取地区信息是常见的前端功能,特别是在用户注册、信息录入等场景。这里我们将深入探讨如何使用JS实现这两个功能,同时结合字符串、数组和正则表达式等相关技术。 首先,身份证...

    JS身份证验证性别和出生日期

    本文将详细介绍如何使用JavaScript验证身份证号码的有效性,并从中提取出生日期和性别信息。 #### 二、验证逻辑解析 1. **长度检查**:首先判断输入的身份证号码长度是否为15位或18位。 2. **正则表达式匹配**: -...

    身份证 验证javascript

    身份证 验证javascript

    JavaScript的form表单验证中的身份证校验.pdf

    为了准确地验证身份证号码,我们需要构建一个正则表达式来匹配这些规则。以下是对每个部分的具体解释: 1. **地址码**(地区): - 表达式:`[1-9]\d{5}` - 解释:首位数字必须为1到9之间的任意一个数字,后面...

    身份证验证javascript脚本

    - 第十八位是校验码,用于验证身份证号码的有效性。 ### JavaScript验证代码分析 #### 地区编码验证 - 通过一个名为`area`的对象来存储各地区的前两位数字及其对应的省份名称。 - 使用`parseInt(idcard.substr(0,2...

Global site tag (gtag.js) - Google Analytics