身份证号码相关操作


<html>
<head><title>身份证男女验证</title></head>

<body>
<div>
输入身份证号判定男女:<input id="Num" type="text" style="width:130">
  <input type="button" value=" 确定 " onclick="searchBegin()">
<br>
         
输入15位号:<input id="Num15" type="text" style="width:130" value="412723850626811">
  <input type="button" value=" 转化 " onclick="numChange()">
  转化为18位号:<input id="Num18" type="text" style="width:130" value="412723198506268117">
</div>

<script language="JavaScript">
/**
*Statement: 调用相应的函数,检测输入的身份证号,并给出错误提示
*/
function searchBegin(){
var myNum=document.getElementById("Num");
var myStr=myNum.value;
if(!checkNum(myStr)){
alert("对不起,您输入的身份证号码有误!");
return;
}
if(genderJudge(myStr)){alert("该身份证号户主为男性!");}
else
{alert("该身份证号户主为女性!");}
}
/**
*Statement: 用正则表达式检测输入的身份证号格式是否正确。如果位18位号并判别校验码
*param: num 要检测的身份证号
*return 返回true代表号码格式正确 false错误 // ____ 待定
*/
function checkNum(num){
var myNum=num+""; //将myNum转化为String,方便正则匹配
var tag=false; //返回tag=1代表长度错误,tag=2代表格式错误,tag=0代表身份证号输入正确
if(myNum.match(/^(:\d{15}|\d{18}|\d{17}X)$/))tag=true;
if(myNum.length==18){ //检测校验位
var num17=myNum.substring(0,18);
if(myNum.charAt(17)!=lastByte(myNum))tag=false;
}
return tag;
}

/**
*Statement: 输入身份证号,判别该户主性别是男或女?
*Param: num 身份证号
*return: 返回true代表男性,false代表女性
*/
function genderJudge(num){ //程序调用前必须确保身份证号的格式是正确的
var myNum=num+""; //接收传递的身份证号码
var ch;
var tag; //标志,true为男,false为女
if(myNum.length==15){
ch=myNum.charAt(14);
if(ch%2==1)tag=true; //15位号最后一位为奇数是男士
}
else {
ch=myNum.charAt(16);
if(ch%2==1)tag=true; //18位号第17位为奇数是男士
}
return tag;
}

/**
*Statement: 将15位身份证号转变为18位
*Param: num 原有的身份证号
*return String 转化后的身份证号
*/
function numChange(){
var myNum=document.getElementById("Num15").value;
var result;
if(myNum.length==18)result=myNum;
else { //如果为15位
//15位号转18位号在第6-7位之间插入两个数字 “19”
var forth17Num=myNum.substring(0,6)+"19"+myNum.substring(6,15);
}
var ch=lastByte(forth17Num);
result=forth17Num+ch;
document.getElementById("Num18").value=result;
return result;
}
/**
*Statement: 用身份证的前17位计算出最后一位验证码
*param num 身份证前17位
*return char 计算得出的一位校验码
*/
function lastByte(num){
var myNum=num;
var lastNumber;
var getNum=eval(myNum.charAt(0)*7+myNum.charAt(1)*9+myNum.charAt(2)*10+myNum.charAt(3)*5+myNum.charAt(4)*8+myNum.charAt(5)*4+myNum.charAt(6)*2+myNum.charAt(7)*1+myNum.charAt(8)*6+myNum.charAt(9)*3+myNum.charAt(10)*7+myNum.charAt(11)*9+myNum.charAt(12)*10+myNum.charAt(13)*5+myNum.charAt(14)*8+myNum.charAt(15)*4+myNum.charAt(16)*2);
getNum=getNum%11;
switch (getNum) {
case 0 : lastNumber="1"; break;
case 1 : lastNumber="0"; break;
case 2 : lastNumber="X"; break;
case 3 : lastNumber="9"; break;
case 4 : lastNumber="8"; break;
case 5 : lastNumber="7"; break;
case 6 : lastNumber="6"; break;
case 7 : lastNumber="5"; break;
case 8 : lastNumber="4"; break;
case 9 : lastNumber="3"; break;
case 10 : lastNumber="2"; break;
}
return lastNumber;
}
</script>
</body>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
作  者:池龙电子邮件:poolord@2ndhometown.net个人主页:http://www.2ndhometown.net开发平台:MS Windows 2000 Profrssional / Delphi 6最后更新:2005.01.16  本压缩包主要包括了身份证号码相关处理单元ascidnum.pas、2004年9月30日的县及县以上行政区划代码定义文件regioncode.dat、18位公民身份证号码的编排规则以及一个示例程序idn.exe及其源代码。许可:  您可以不受任何限制的使用、修改、分发这个单元,但请不要删除此说明。  作者对本单元不作任何显式或隐含的安全性和适用性的担保。  如果您对本单元进行了修改,请花几分钟发送一份拷贝给我,非常感谢。版本历史:  2005.01.16 完成本单元        基本功能:          1. 从身份证号码中取信息          2. 判断身份证号码的有效性          3. 将15位号码转换成18位号码关于区划代码定义文件的说明:  区划代码转换为名称的部分,需要从外部文件中读取区划定义的数据(如随单元发布的文件regioncode.dat)。  该文件为纯文本文件,每行是一个代码和名称的对应关系。代码和名称之间以逗号作分隔。以#开头的行作为注释行,空行不处理。程序中作了一定的容错处理,通常情况下,不正确的数据会被略过。但在重新编排时,还是请尽量保证数据的正确性。  另外,为了保证查找的效率,所以要求文件中的记录按区划代码由小到大的顺序排列。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值