找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 23510|回复: 2

[原创代码] 18位身份证号码的javascript验证方法

[复制链接]
发表于 2012-12-17 00:25:48 | 显示全部楼层 |阅读模式
18位身份证号码的验证方法。
在线测试(验证账号与密码皆为yu2n):http://yu2n.tk/doc/sfz.html
  1. // 验证身份证号码功能
  2. function checkID(sID){
  3.     // 验证身份证号码格式
  4.         var strPass = false;
  5.     if(/^\d{15}$|^\d{18}$|^\d{17}[xX]$/.test(sID))
  6.     {
  7.         // 验证出生日期
  8.         var pattern = /^((\d{2}(([02468][048])|([13579][26]))((((0[13578])|(1[02]))((0[1-9])|([1-2][0-9])|(3[01])))|(((0[469])|(11))((0[1-9])|([1-2][0-9])|(30)))|(02((0[1-9])|([1-2][0-9])))))|(\d{2}(([02468][1235679])|([13579][01345789]))((((0[13578])|(1[02]))((0[1-9])|([1-2][0-9])|(3[01])))|(((0[469])|(11))((0[1-9])|([1-2][0-9])|(30)))|(02((0[1-9])|(1[0-9])|(2[0-8]))))))?$/;
  9.         if (pattern.test(sID.substring(6, 6 + 8)))
  10.         {
  11.             // 验证校验码
  12.             var str = sID.substring(0, 17);
  13.             if (per17To18(str)==sID.toUpperCase()){strPass = true};
  14.         }
  15.     }

  16.         if (strPass == true){
  17.         // 输出验证结果
  18.         var strAreaID = sID.substring(0, 6);
  19.         var strDate = sID.substring(6, 14);
  20.         var strAreaFullName = GetAreaName(strAreaID);
  21.         var valSex = sID.substring(14, 17) % 2, strSex;   (valSex==0)? strSex = "女" : strSex = "男";
  22.         var strFullDate = strDate.substring(0, 4) + "年" + strDate.substring(4, 6) + "月" + strDate.substring(6, 8) + "日";
  23.     }
  24. }

  25. //关键:计算效验码,返回完整的身份证号
  26. function per17To18(str){
  27.     var A = new Array(17);
  28.     var W = "7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2".split(",");//加权因子
  29.     var S = 0;
  30.     //(1)十七位数字本体码加权求和公式
  31.     for (var i = 0; i < A.length; i++)
  32.     {
  33.        A[i] = str.substring(i, i + 1);
  34.        S += A[i] * W[i];
  35.     }
  36.     //(2)计算模
  37.     var Y = S % 11;
  38.     //(3)通过模得到对应的校验码
  39.     var C = "1,0,X,9,8,7,6,5,4,3,2".split(",");//效验码
  40.     return str + C[Y];
  41. }
复制代码

评分

参与人数 1技术 +1 收起 理由
batman + 1 多谢分享

查看全部评分

发表于 2012-12-17 08:58:26 | 显示全部楼层
最后几行变成斜体了,说明丢失了一些代码。
还是放到code标签里面吧
 楼主| 发表于 2012-12-19 00:48:15 | 显示全部楼层
本帖最后由 yu2n 于 2013-1-11 01:45 编辑
最后几行变成斜体了,说明丢失了一些代码。
还是放到code标签里面吧
Batcher 发表于 2012-12-17 08:58


1楼已更改。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 09:41 , Processed in 0.010774 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表