从1999年10月1日起,全国实行公民身份证号码制度,居民身份证编号由原15位升至18位。前6位为地址码;第七位至14位为出生日期码,此码由6位数改为8位数,其中年份用4位数表示;第15位至17位为顺序码,取消了顺序码中对百岁老人使用的特定编号;第十八位为校验码,主要是为了校验计算机输入公民身份证号码的前17位数字是否正确,其取值范围是0至10,当值等于10时,用罗马数字符χ表示。
/**
* 身份证15位编码规则:dddddd yymmdd xx p
* dddddd:地区码
* yymmdd: 出生年月日
* xx: 顺序类编码,无法确定
* p: 性别,奇数为男,偶数为女
* <p />
* 身份证18位编码规则:dddddd yyyymmdd xxx y
* dddddd:地区码
* yyyymmdd: 出生年月日
* xxx:顺序类编码,无法确定,奇数为男,偶数为女
* y: 校验码,该位数值可通过前17位计算获得
* <p />
* 18位号码加权因子为(从右到左) Wi = [ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2,1 ]
* 验证位 Y = [ 1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2 ]
* 校验位计算公式:Y_P = mod( ∑(Ai×Wi),11 )
* i为身份证号码从右往左数的 2...18 位; Y_P为脚丫校验码所在校验码数组位置
*
*/
var Wi = [ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1 ];// 加权因子
var ValideCode = [ 1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2 ];// 身份证验证位值.10代表X
function IdCardValidate(idCard) {
idCard = trim(idCard.replace(/ /g, ""));
if (idCard.length == 15) {
return isValidityBrithBy15IdCard(idCard);
} else if (idCard.length == 18) {
var a_idCard = idCard.split("");// 得到身份证数组
if(isValidityBrithBy18IdCard(idCard)&&isTrueValidateCodeBy18IdCard(a_idCard)){
return true;
}else {
return false;
}
} else {
return false;
}
}
/**
* 判断身份证号码为18位时最后的验证位是否正确
* @param a_idCard 身份证号码数组
* @return
*/
function isTrueValidateCodeBy18IdCard(a_idCard) {
var sum = 0; // 声明加权求和变量
if (a_idCard[17].toLowerCase() == 'x') {
a_idCard[17] = 10;// 将最后位为x的验证码替换为10方便后续操作
}
for ( var i = 0; i < 17; i++) {
sum += Wi * a_idCard;// 加权求和
}
valCodePosition = sum % 11;// 得到验证码所位置
if (a_idCard[17] == ValideCode[valCodePosition]) {
return true;
} else {
return false;
}
}
/**
* 通过身份证判断是男是女
* @param idCard 15/18位身份证号码
* @return 'female'-女、'male'-男
*/
function maleOrFemalByIdCard(idCard){
idCard = trim(idCard.replace(/ /g, ""));// 对身份证号码做处理。包括字符间有空格。
if(idCard.length==15){
if(idCard.substring(14,15)%2==0){
return 'female';
}else{
return 'male';
}
}else if(idCard.length ==18){
if(idCard.substring(14,17)%2==0){
return 'female';
}else{
return 'male';
}
}else{
return null;
}
分享到:
相关推荐
Python版身份证识别算法是利用计算机视觉和机器学习技术来自动识别身份证件上的文字信息,尤其在现代社会中,这种技术有着广泛的应用,例如在银行开户、网络注册、酒店入住等场景。该算法通常包括图像预处理、字符...
这是一个网页源码,身份证的验证。利用JavaScript制作的。
本文将深入探讨身份证号码的算法以及如何利用正则表达式(RegExp)进行表单验证,旨在帮助开发者提升应用程序的安全性和用户体验。 首先,让我们理解身份证号码的构成。中国的身份证号码由18位数字组成,分为五个部分...
个人实战积累的成果,基于国密算法的总结,希望可以帮到您 亲们下载我任何一个付费资源后,即可私信联系我免费下载其他相关资源哦~ 个人实战积累的成果,基于国密算法的总结,希望可以帮到您 亲们下载我任何一个...
身份证验证算法是用于确认个人身份的一种重要技术,它基于我国公民身份证号码的编码规则进行设计。身份证号码由18位数字组成(在某些情况下可能是15位),包含了丰富的个人信息,如出生地、出生日期和性别。这个算法...
一个身份证识别的算法,有具体的c语言实现,简洁明了,适合初学者
"寻径算法JS版本"标题表明我们将讨论如何使用JavaScript语言来编写寻径算法。 "有源码+DEMO"的描述意味着我们不仅有机会看到实际的代码实现,还可以通过DEMO(演示)直观地理解算法的工作原理。通常,这样的资源...
《算法》第四版是图灵丛书中的经典之作,专注于阐述算法和数据结构的核心概念,是计算机科学和技术领域不可或缺的学习资源。这本书以清晰易懂的方式,深入浅出地讲解了编程中涉及的各种算法和数据结构,适合初学者和...
本项目聚焦于如何利用JavaScript设计和实现一个旅行路径规划算法,以帮助用户高效地规划他们的出行路线。 首先,我们需要理解路径规划的基本概念。路径规划算法通常涉及图论中的最短路径问题,如Dijkstra算法或A*...
蚁群算法matlab版蚁群算法matlab版 蚁群算法matlab版蚁群算法matlab版 蚁群算法matlab版蚁群算法matlab版 蚁群算法matlab版蚁群算法matlab版 蚁群算法matlab版蚁群算法matlab版 蚁群算法matlab版蚁群算法matlab版 蚁...
操作系统中的银行家算法是一种著名的资源分配策略,用于...在压缩包中的"bank"文件可能是实现银行家算法的JS源代码文件,打开后可以查看具体的实现细节和注释,这对于深入理解和实践操作系统中的银行家算法非常有帮助。
代码里所用的例子是算法导论第三版第24章讲dijkstra时所用的例题
算法第四版; 算法第四版;算法第四版;算法第四版;算法第四版;算法第四版;数据结构
随着JavaScript在服务器端编程中的广泛应用,尤其是通过Node.js和SpiderMonkey等平台的支持,JavaScript开发者越来越需要掌握传统语言如C++和Java中提供的工具和技术。本书旨在帮助JavaScript程序员理解和实现传统...
《算法(第四版)》是一本深入探讨计算机科学核心领域——算法的权威著作。这本书旨在为程序员提供必要的算法知识,帮助他们理解和实现各种常见的排序、搜索、图处理和字符串处理算法,同时也涵盖了50种每个专业...
"各种数学函数算法实现js版本"是一个专门为这些需求提供的资源,它包含了多种数学函数的JavaScript实现,可以极大地提高开发效率,避免重复造轮子,同时减少服务器与客户端之间的数据交换,提升用户体验。...
贪心算法JS C++实现,希望能帮到大家贪心算法JS
18位身份证号码验证算法.doc
"H5JS游戏常用算法-路径搜索算法-随机迷宫算法(普里姆算法)" 本资源主要介绍了游戏开发中常用的路径搜索算法和随机迷宫算法,着重于普里姆算法的应用。路径搜索算法是游戏开发中非常重要的一部分,特别是在RPG、...