JS身份证号码验证函数 支持带x的号码


<script type="text/javascript">
alert(isIdCardNo(
"440781197007220512"));
//--身份证号码验证-支持新的带x身份证
function isIdCardNo(num)
{
var factorArr =new Array(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2,1);
var error;
var varArray =new Array();
var intValue;
var lngProduct =0;
var intCheckDigit;
var intStrLen = num.length;
var idNumber = num;
// initialize
if ((intStrLen !=15) && (intStrLen !=18)) {
//error = "输入身份证号码长度不对!";
//alert(error);
//frmAddUser.txtIDCard.focus();
returnfalse;
}
// check and set value
for(i=0;i<intStrLen;i++) {
varArray[i]
= idNumber.charAt(i);
if ((varArray[i] <'0'|| varArray[i] >'9') && (i !=17)) {
//error = "错误的身份证号码!.";
//alert(error);
//frmAddUser.txtIDCard.focus();
returnfalse;
}
elseif (i <17) {
varArray[i]
= varArray[i]*factorArr[i];
}
}
if (intStrLen ==18) {
//check date
var date8 = idNumber.substring(6,14);
if (checkDate(date8) ==false) {
//error = "身份证中日期信息不正确!.";
//alert(error);
returnfalse;
}
// calculate the sum of the products
for(i=0;i<17;i++) {
lngProduct
= lngProduct + varArray[i];
}
// calculate the check digit
intCheckDigit =12- lngProduct %11;
switch (intCheckDigit) {
case10:
intCheckDigit
='X';
break;
case11:
intCheckDigit
=0;
break;
case12:
intCheckDigit
=1;
break;
}
// check last digit
if (varArray[17].toUpperCase() != intCheckDigit) {
//error = "身份证效验位错误!...正确为: " + intCheckDigit + ".";
//alert(error);
returnfalse;
}
}
else{ //length is 15
//check date
var date6 = idNumber.substring(6,12);
if (checkDate(date6) ==false) {
//alert("身份证日期信息有误!.");
returnfalse;
}
}
//alert ("Correct.");
returntrue;
}

function checkDate(date)
{
returntrue;
}
</script>
/////////根据身份证判断性别和生日
<%@ Page language="c#" Codebehind="CordBirthday.aspx.cs" AutoEventWireup="false" Inherits="CodeDatum.birthday.CordBirthday"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<title>CordBirthday</title>
<meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
<meta name="CODE_LANGUAGE" Content="C#">
<meta name="vs_defaultClientScript" content="JavaScript">
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
<script language="javascript">
function showBirthday(val)
{
var birthdayValue;
if(15==val.length)
{
//15位身份证号码
birthdayValue = val.charAt(6)+val.charAt(7);
if(parseInt(birthdayValue)<10)
{
birthdayValue
='20'+birthdayValue;
}
else
{
birthdayValue
='19'+birthdayValue;
}
birthdayValue
=birthdayValue+'-'+val.charAt(8)+val.charAt(9)+'-'+val.charAt(10)+val.charAt(11);
if(parseInt(val.charAt(14)/2)*2!=val.charAt(14))
document.all.sex.value='';
else
document.all.sex.value
='';
document.all.birthday.value
=birthdayValue;
}
if(18==val.length)
{
//18位身份证号码
birthdayValue=val.charAt(6)+val.charAt(7)+val.charAt(8)+val.charAt(9)+'-'+val.charAt(10)+val.charAt(11)

+'-'+val.charAt(12)+val.charAt(13);
if(parseInt(val.charAt(16)/2)*2!=val.charAt(16))
document.all.sex.value='';
else
document.all.sex.value
='';
if(val.charAt(17)!=IDCard(val))
{
document.all.idCard.style.backgroundColor
='#ffc8c8';
}
else
{
document.all.idCard.style.backgroundColor
='white';
}
document.all.birthday.value
=birthdayValue;
}
}

// 18位身份证号最后一位校验
function IDCard(Num)
{
if (Num.length!=18)
returnfalse;
var x=0;
var y='';

for(i=18;i>=2;i--)
x
= x + (square(2,(i-1))%11)*parseInt(Num.charAt(19-i-1));
x
%=11;
y
=12-x;
if (x==0)
y
='1';
if (x==1)
y
='0';
if (x==2)
y
='X';
return y;
}

// 求得x的y次方
function square(x,y)
{
var i=1;
for (j=1;j<=y;j++)
i
*=x;
return i;
}
</script>
</HEAD>
<body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" runat="server">
<table align="center">
<tr>
<td align="center">身份证:<input type="text" name="idCard" id="idCard"></td>
</tr>
<tr>
<td align="center">性 别:<input type="text" name="sex" id="sex"></td>
</tr>
<tr>
<td align="center">生 日:<input type="text" name="birthday" id="birthday"></td>
</tr>
<tr>
<td align="center"><input type="button" onclick="showBirthday(document.all.idCard.value)" value="OK"></td>
</tr>
</table>
</form>
</body>
</HTML>
原文地址:https://www.cnblogs.com/lfzm/p/2055939.html