`
tntxia
  • 浏览: 1506676 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

一段检验身份证号码的JS(附检验原理)

阅读更多

<script>
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]{5}[0-9]{2}((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]{3}$/;
} else {
ereg=/^[1-9][0-9]{5}[0-9]{2}((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]{3}$/;
}
if(ereg.test(idcard)) return Errors[0];
else return Errors[2];
break;
case 18:
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]{5}19[0-9]{2}((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]{3}[0-9Xx]$/;//闰年出生日期的合法性正则表达式
} else {
ereg=/^[1-9][0-9]{5}19[0-9]{2}((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]{3}[0-9Xx]$/;//平年出生日期的合法性正则表达式
}
if(ereg.test(idcard)){
S = (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 ;
Y = S % 11;
M = "F";
JYM = "10X98765432";
M = JYM.substr(Y,1);
if(M == idcard_array[17]) return Errors[0];
else return Errors[3];
}
else return Errors[2];
break;
default:
return Errors[1];
break;
}
}
alert(checkIdcard("44011119841031482X"))
</script>

 

VFP的身份证校验算法!
---------------------------------------------------------------

关于身份证号码最后一位的校验码的算法如下:

我国现行使用公民身份证号码有两种尊循两个国家标准,〖GB 11643-1989〗和〖GB 11643-1999〗。
〖GB 11643-1989〗中规定的是15位身份证号码:排列顺序从左至右依次为:六位数字地址码,六位数字出生日期码,三位数字顺序码,其中出生日期码不包含世纪数。
〖GB 11643-1999〗中规定的是18位身份证号码:公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。
地址码表示编码对象常住户口所在县(市、旗、区)的行政区划代码。
生日期码表示编码对象出生的年、月、日,其中年份用四位数字表示,年、月、日之间不用分隔符。
顺序码表示同一地址码所标识的区域范围内,对同年、月、日出生的人员编定的顺序号。顺序码的奇数分给男性,偶数分给女性。
校验码是根据前面十七位数字码,按照ISO 7064:1983.MOD 11-2校验码计算出来的检验码。
公式如下:
  ∑(a[i]*W[i]) mod 11 ( i = 2, 3, ..., 18 ) (1)
  "*" 表示乘号
  i--------表示身份证号码每一位的序号,从右至左,最左侧为18,最右侧为1。
  a[i]-----表示身份证号码第 i 位上的号码
  W[i]-----表示第 i 位上的权值 W[i] = 2^(i-1) mod 11
  计算公式 (1) 令结果为 R
根据下表找出 R 对应的校验码即为要求身份证号码的校验码C。
  R 0 1 2 3 4 5 6 7 8 9 10
  C 1 0 X 9 8 7 6 5 4 3 2
由此看出 X 就是 10,罗马数字中的 10 就是X,所以在新标准的身份证号码中可能含有非数字的字母X。

分享到:
评论

相关推荐

    JS 身份证验证程序

    JavaScript(简称JS)是一种广泛用于网页和网络应用的编程语言,尤其在客户端脚本中扮演着重要角色。本文将深入探讨如何使用JavaScript进行身份证验证,包括有效性检查和区域信息识别。 身份证验证是确保用户输入的...

    身份证号解析系统

    中国的身份证号码由18位数字组成,每一段数字都有其特定含义,揭示了持有人的出生地、出生日期、性别等关键个人信息。这个系统可能是以美观易用的界面呈现,方便用户直观地理解和获取这些信息。 首先,我们来深入...

    jquery 校验中国身份证号码实例详解

    这段代码定义了一个名为`check_id`的函数,它接收一个字符串参数`value`,该字符串表示用户输入的身份证号码。函数内部首先使用正则表达式进行格式校验,然后通过循环累加计算加权因子与相应数字的乘积之和,之后...

    验证身份证.pdf

    这段代码是用来验证一个给定的身份证号码是否有效的。在中国,身份证号码是由18位数字组成,包含了出生日期、性别、地区代码以及顺序码和校验码。下面我们将深入探讨身份证验证的相关知识点。 首先,代码中用到了...

    正则表达式验证身份证号码和邮箱、判断checked选中状态

    验证身份证号码的方法通常会使用正则表达式来检测一个字符串是否符合上述的格式规则。 邮箱地址的正则表达式验证 邮箱地址通常由本地部分、@符号和域名部分组成。本地部分可以包含字母、数字、下划线、点号、减号和...

    jQuery实现从身份证号中获取出生日期和性别的方法分析

    1. 第一段代码展示了一个完整的提取过程,包括对15位和18位身份证号码的处理。 2. 第二段代码则专注于提取性别信息,并使用if-else结构来判断。 ### jQuery应用技巧 文件还提到其他一些与jQuery相关的技巧和专题,...

    使用JavaScript判断文本框中的内容是否为一个正确的手机号

    ### 使用JavaScript判断文本框中的内容是否为一个正确的手机号或身份证号 在Web开发中,确保用户输入的数据符合预期格式是一项非常重要的任务。特别是在涉及到敏感信息如手机号和身份证号时,前端验证可以提供即时...

    常用js表单验证.pdf

    **功能描述:**检查输入的一串字符是否符合中国大陆身份证号码的标准格式。 **参数说明:** - `str`: 需要验证的字符串。 **返回值:** - `true`:如果字符串符合身份证号码格式; - `false`:如果字符串不符合...

    js脚本大全 js验证大全 压缩包

    1.44 判断文本内容是否少于 2 个汉字/字符(js中汉字和字符占位一 样).. 53 1.45 检测输入是否只有字母或数字. 53 1.46 检测输入是否只有数字或不详,且输入数值不能过大(不能超过 32767).. 54 1.47 检测输入是否...

    javascript表单验证大全

    在表单验证中,身份证号码验证是一个常见的需求。此段代码提供了针对15位与18位身份证号码的验证方法。具体实现如下: ```javascript function idNumber(s) { // 定义15位身份证号正则表达式 var regu1 = /^[1-9]...

    毕业设计论文进度汇报-(3.16-3.22)1

    4. 结果纠正:由于OCR识别可能会出现错误,所以需要通过全国行政区和身份证号码的对应关系进行校正。这通常需要建立一个数据库或者查询服务,来验证和修正识别结果。 5. 系统实现:这部分计划在网页环境中展示模型...

    实用javascript验证前台实例

    9. **检查一段字符串是否全由数字组成**:这个功能常用于电话号码或身份证号等字段的验证。使用正则表达式`/^\d+$/`可以检查字符串是否全由数字构成。 10. **屏蔽关键字**:在某些场合,需要避免用户输入特定的...

    程序天下:JavaScript实例自学手册

    17.3 CSS+JS制作的进度条(一) 17.4 CSS+JS制作的进度条(二) 17.5 进度条形式的下载效果 17.6 滑动条(一) 17.7 滑动条(二) 17.8 窗体滚动条随文字增加自动滚动 17.9 为textarea加横向滚动条 17.10 记录滚动条...

    《程序天下:JavaScript实例自学手册》光盘源码

    17.3 CSS+JS制作的进度条(一) 17.4 CSS+JS制作的进度条(二) 17.5 进度条形式的下载效果 17.6 滑动条(一) 17.7 滑动条(二) 17.8 窗体滚动条随文字增加自动滚动 17.9 为textarea加横向滚动条 17.10 记录滚动条...

    JavaScript王者归来part.1 总数2

    方法从身份证号码获取生日的例子   10.3.2.2 一个使用test()方法遍历字符串的例子   10.4 关于正则表达式包装对象   10.4.1 RegExp对象——利用正则表达式实现全文检索   10.4.2 RegExp的实例属性   10.5 ...

    常用正则汇总包含常用js代码

    这段代码定义了一个名为`lTrim`的函数,该函数接受一个字符串参数`str`,如果`str`不是字符串类型或为空,则返回空字符串;否则,它将移除字符串左侧的所有空白字符。 #### 2. 右端空白字符去除 (RTrim) ```...

    详解表单验证正则表达式实例(推荐)

    给出的代码中没有直接提供一个正则表达式,而是通过一段函数 `check_idcard` 来验证身份证号码的有效性。函数 `check_idcard` 首先检查身份证号码长度是否为18位,其次检查省份代码是否存在于给定的 `varcity` 对象...

Global site tag (gtag.js) - Google Analytics