`

http://www.blogjava.net/supercrsky/articles/222217

阅读更多

验证身份证的完整函数

/**/ /* 验证身份证的完整函数(限中国) */
function  checkIdcard(idcard)

var  Errors = new  Array( 
" 验证通过! "
" 身份证号码位数不对! "
" 身份证号码出生*期超出范围或含有非法字符! "
" 身份证号码校验错误! "
" 身份证地区非法! "  
); 
var  area = { 11 : " 北京 " , 12 : " 天津 " , 13 : " 河北 " , 14 : " 山西 " , 15 : " 内蒙古 " , 21 : " 辽宁 " , 22 : " 吉林 " , 23 : " 黑龙江 " , 31 : " 上海 " , 32 : " 江苏 " , 33 : " 浙江 " , 34 : " 安徽 " , 35 : " 福建 " , 36 : " 江西 " , 37 : " 山东 " , 41 : " 河南 " , 42 : " 湖北 " , 43 : " 湖南 " , 44 : " 广东 " , 45 : " 广西 " , 46 : " 海南 " , 50 : " 重庆 " , 51 : " 四川 " , 52 : " 贵州 " , 53 : " 云南 " , 54 : " 西藏 " , 61 : " 陕西 " , 62 : " 甘肃 " , 63 : " 青海 " , 64 : " 宁夏 " , 65 : " 新疆 " , 71 : " 台湾 " , 81 : " 香港 " , 82 : " 澳门 " , 91 : " 国外 " }

var  idcard,Y,JYM; 
var  S,M; 
var  idcard_array  =   new  Array(); 
idcard_array 
=  idcard.split( "" ); 
// 地区检验 
if (area[parseInt(idcard.substr( 0 , 2 ))] == null return  Errors[ 4 ]; 
// 身份号码位数及格式检验 
switch (idcard.length)
case   15
if  ( (parseInt(idcard.substr( 6 , 2 )) + 1900 %   4   ==   0   ||  ((parseInt(idcard.substr( 6 , 2 )) + 1900 %   100   ==   0   &&  (parseInt(idcard.substr( 6 , 2 )) + 1900 %   4   ==   0  ))
ereg
=/^ [ 1 - 9 ][ 0 - 9 ][ 0 - 9 ](( 01 | 03 | 05 | 07 | 08 | 10 | 12 )( 0 [ 1 - 9 ] | [ 1 - 2 ][ 0 - 9 ] | 3 [ 0 - 1 ]) | ( 04 | 06 | 09 | 11 )( 0 [ 1 - 9 ] | [ 1 - 2 ][ 0 - 9 ] | 30 ) | 02 ( 0 [ 1 - 9 ] | [ 1 - 2 ][ 0 - 9 ]))[ 0 - 9 ]$ / ; // 测试出生*期的合法性 
}
  else  
ereg
=/^ [ 1 - 9 ][ 0 - 9 ][ 0 - 9 ](( 01 | 03 | 05 | 07 | 08 | 10 | 12 )( 0 [ 1 - 9 ] | [ 1 - 2 ][ 0 - 9 ] | 3 [ 0 - 1 ]) | ( 04 | 06 | 09 | 11 )( 0 [ 1 - 9 ] | [ 1 - 2 ][ 0 - 9 ] | 30 ) | 02 ( 0 [ 1 - 9 ] | 1 [ 0 - 9 ] | 2 [ 0 - 8 ]))[ 0 - 9 ]$ / ; // 测试出生*期的合法性 
}
 
if (ereg.test(idcard))  return  Errors[ 0 ]; 
else   return  Errors[ 2 ]; 
break
case   18
// 18位身份号码检测 
//
出生*期的合法性检查  
//
闰年月*:((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9])) 
//
平年月*:((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8])) 
if  ( parseInt(idcard.substr( 6 , 4 ))  %   4   ==   0   ||  (parseInt(idcard.substr( 6 , 4 ))  %   100   ==   0   &&  parseInt(idcard.substr( 6 , 4 )) % 4   ==   0  ))
ereg
=/^ [ 1 - 9 ][ 0 - 9 ] 19 [ 0 - 9 ](( 01 | 03 | 05 | 07 | 08 | 10 | 12 )( 0 [ 1 - 9 ] | [ 1 - 2 ][ 0 - 9 ] | 3 [ 0 - 1 ]) | ( 04 | 06 | 09 | 11 )( 0 [ 1 - 9 ] | [ 1 - 2 ][ 0 - 9 ] | 30 ) | 02 ( 0 [ 1 - 9 ] | [ 1 - 2 ][ 0 - 9 ]))[ 0 - 9 ][ 0 - 9Xx]$ / ; // 闰年出生*期的合法性正则表达式 
}
  else  
ereg
=/^ [ 1 - 9 ][ 0 - 9 ] 19 [ 0 - 9 ](( 01 | 03 | 05 | 07 | 08 | 10 | 12 )( 0 [ 1 - 9 ] | [ 1 - 2 ][ 0 - 9 ] | 3 [ 0 - 1 ]) | ( 04 | 06 | 09 | 11 )( 0 [ 1 - 9 ] | [ 1 - 2 ][ 0 - 9 ] | 30 ) | 02 ( 0 [ 1 - 9 ] | 1 [ 0 - 9 ] | 2 [ 0 - 8 ]))[ 0 - 9 ][ 0 - 9Xx]$ / ; // 平年出生*期的合法性正则表达式 
}
 
if (ereg.test(idcard)) { // 测试出生*期的合法性 
//
计算校验位 
=  (parseInt(idcard_array[ 0 ])  +  parseInt(idcard_array[ 10 ]))  *   7  
+  (parseInt(idcard_array[ 1 ])  +  parseInt(idcard_array[ 11 ]))  *   9  
+  (parseInt(idcard_array[ 2 ])  +  parseInt(idcard_array[ 12 ]))  *   10  
+  (parseInt(idcard_array[ 3 ])  +  parseInt(idcard_array[ 13 ]))  *   5  
+  (parseInt(idcard_array[ 4 ])  +  parseInt(idcard_array[ 14 ]))  *   8  
+  (parseInt(idcard_array[ 5 ])  +  parseInt(idcard_array[ 15 ]))  *   4  
+  (parseInt(idcard_array[ 6 ])  +  parseInt(idcard_array[ 16 ]))  *   2  
+  parseInt(idcard_array[ 7 ])  *   1   
+  parseInt(idcard_array[ 8 ])  *   6  
+  parseInt(idcard_array[ 9 ])  *   3  ; 
=  S  %   11
=   " F "
JYM 
=   " 10X98765432 "
=  JYM.substr(Y, 1 ); // 判断校验位 
if (M  ==  idcard_array[ 17 ])  return  Errors[ 0 ];  // 检测ID的校验位 
else   return  Errors[ 3 ]; 
}
 
else   return  Errors[ 2 ]; 
break
default
return  Errors[ 1 ]; 
break
}
 

}

分享到:
评论

相关推荐

    http://www.blogjava.net/youlq/archive/2005/12/06/22678.html

    接着,我们定义安全拦截器,例如`ChannelProcessingFilter`用于HTTP和HTTPS之间的切换,以及`SecurityContextHolderAwareRequestFilter`用于处理Spring MVC请求。 然后,我们需要定义访问控制策略。Acegi支持基于...

    flash动态图片的自动播放效果

    0x000000&bcastr_flie=1.jpg|2.jpg|3.jpg|4.jpg|5.jpg&bcastr_link=http://www.baidu.com|http://www.google.com|http://www.sina.com.cn|http://bbs.crsky.com|http://www.blogjava.net/supercrsky&bcastr_title=...

    java常用网址,可能已经过期了

    - [http://www.blogjava.net/wangxinsh55/archive/2006/04/27/43535.html](http://www.blogjava.net/wangxinsh55/archive/2006/04/27/43535.html) - **知识点**:Git是一款非常流行的分布式版本控制系统,广泛应用...

    hadoop学习资料地址

    4. **Killme2008的博客**:`http://www.blogjava.net/killme2008/archive/2008/06/05/206043.html` - 深入解析了Hadoop的架构设计和关键点。 5. **CSDN博客** - `...

    集XMPP推送与聊天于一体的Openfire开发Android

    与标题一致的描叙,你值得拥有,确实很值。来赚分啦。 参考下面大侠而来 http://blog.csdn.net/xutaozero21/article/details/4873439 ...http://www.blogjava.net/lizongbo/archive/2006/12/04/85433.html

    compass包及相关学习资料

    Compass是一个强大的,事务的,高性能的对象/搜索引擎映射(OSEM:object/search engine mapping)与一个Java持久层框架.内容包括compass的jar包及从网上搜集的相关学习资料. 附两个不错的资料地址: ...

    webservices示例工程

    1.webservieces 示例工程源码 里面有两个...http://www.blogjava.net/RongHao/archive/2007/06/12/123638.html(axis1) http://wenku.baidu.com/view/1d9b3d2ecfc789eb172dc8a5.html(axis2) 5.欢迎大家踊跃下载分享传播

    文件上传的解决方案总结暨CSV文件解析

    第二种是用Apache组织的commons项目中的FileUpload组件,参考资料http://www.blogjava.net/lushengdi/archive/2009/01/09/227063.html。 今天介绍第二种方案中的文件上传,文件下载功能则可细想而知。 第二种方案中...

    android学习资料(网站,论坛)

    3. **TiGERTiAN博客(http://www.blogjava.net/TiGERTiAN/archive/2010/02/03/311827.html)**:专注于Java和Android技术的深度解析。 4. **CSDN博客...

    百度mp3Searcher

    Swing 程序 软件声明 ========== 本软件为免费开源软件!仅供学习研究使用,未供许可请不要作用于任何商业目的!欢迎学习交流!...Blog: http://www.blogjava.net/huliqing/ home: http://www.tbuy.biz/

    Struts2_Validation

    //wiki.javascud.org/display/ww2cndoc/Valida<br>tion 网站上收集的一些关于有关Struts2验证框架的资料,并将其做成电子书以方便查看,另外向朋友们推荐一个很好的学习Struts2的博客http://www.blogjava.net/max,...

    Eclipse 设置、调优、使用(解决 卡顿 编译 占内存等问题)

    1. JVM 启动参数大全:http://www.blogjava.net/midstr/archive/2008/09/21/230265.html 2. JVM 结构的一些知识:http://hllvm.group.iteye.com/group/wiki/2905-JVM 3. JVM 堆知识:...

    JavaDOCHelper1.5.1_Viewer

    JavaDOCHelper Viewer 提供了在一个界面里查看、搜索众多组件的HTML格式JAVA DOC api文档,类似于chm格式。 软件界面:http://www.blogjava.net/Unmi/archive/2007/10/08/150946.html

    python使用PIL库读取图片的像素值

    Python 使用 PIL 库读取图片的像素值 本文主要介绍了如何使用 Python 的 PIL 库读取图片的像素值,以便在游戏开发中删除不需要的...* PIL 库教程:<http://www.blogjava.net/Skynet/archive/2009/11/28/303986.html>

    MyEclipse 6 Java 开发中文教程2011

    亲爱的读者, 当您掌握了本书的内容后, 应立即掌握以Google来阅读文章提高自己能力的自学之路, 并加入到企业投入到真正企业项目的锻炼中去, ...链接:http://www.blogjava.net/beansoft/archive/2010/09/09/331571.html

    libxml2-2.7.4库(附编译安装使用教程).zip

    如果希望处理xml的话,需要使用一个开源的库:libxml2 最开始应该根据本机的环境生成...对了,依附的代码摘自:http://www.blogjava.net/wxb_nudt/archive/2007/11/18/161340.html 很不错的一篇文章,在此表示感谢了!

    owl-s组合webservice实例

    网上一个经典的owl-s例子其www.bs-byg.dk/hashclass.wsdl不能用了,故又找了一个globalweather服务...不过还是能模仿 用protege插件编辑OWL-S的实例 - 勇敢的心 - BlogJava.jpg 的例子,做出来的,供学习用。

    如何个性化地生成Javadoc文档

    这一段时间在研究Javadoc的问题,前面发布的Javadoc转换chm帮助文档的四种方法总结,总结了如何实现Javadoc到chm的转换,希望给大家带来了一些方便,今天...本人博客:http://www.blogjava.net/lishunli/,希望大家支持

    flex 学习网址

    - **链接**:http://www.blogjava.net/feilongone/articles/72596.html - **简介**:本文作者分享了自己在实际项目中运用Flex的一些经验和技巧,如性能优化策略、调试方法等。 - **特点**:更侧重于实践经验总结...

    为Struts 2.0做好准备

    http://www.blogjava.net/max/archive/2006/10/10/74353.html 为Struts 2.0做好准备 Struts作为MVC 2的Web框架,自推出以来不断受到开发者的追捧,得到用广泛的应用。作为最成功的Web框架,Struts自然拥有众多的...

Global site tag (gtag.js) - Google Analytics