ASP身份证号码验证函数
发布时间:2005-11-8
╔----------------------------------------╗
┆  来自:http://study.5axx.com           ┆
┆  整理:阿炳                            ┆
┆  投稿:(转贴)                        ┆
╚----------------------------------------╝

 function checkIDCard(s, d, g) 

if (!s) return false; 
d = new Date(d); 
if (!d.getTime()) return false; 

var t, r; 

t = "" + d.getFullYear() + dblNum(d.getMonth() + 1) + dblNum(d.getDate()); 

if (g == null || isNaN(g)) return false; 
g = parseInt(g) % 2; 

switch (s.length) 

case 8 : 
if (new Date() > d.setFullYear(d.getFullYear() + 19)) return false; 
r = /^[\d]{8}$/; 
if (!r.test(s)) return false; 
if (s != t) return false; 

break; 
case 15 : 
r = /^[\d]{15}$/; 
if (!r.test(s)) return false; 
if (s.substr(6, 6) != t.substr(2)) return false; 
if (parseInt(s.charAt(14)) % 2 != g) return false; 

break; 
case 18 : 
r = /^(?:[\d]{18}|[\d]{17}X)$/i; 
if (!r.test(s)) return false; 
if (s.substr(6, 8) != t) return false; 
if (parseInt(s.charAt(16)) % 2 != g) return false; 

var n = 0; 
var w = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2); // 加权因子 
var c = new Array("1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"); // 校验码 

for (var i = 0; i < 17; i++) 

n += parseInt(s.charAt(i)) * w[i]; 


if (s.charAt(17).toUpperCase() != c[n % 11]) return false; 

break; 
default : 
return false; 


return true; 


function dblNum(n) 

return parseInt(n) < 10 ? "0" + n : n; 


//var sss = "422324860305482"; 
//Response.Write(checkIDCard(sss, "03/05/1986", 0));