function showBirthday(val)
{
var birthdayValue;
if(15==val.length)
{ //15位身份证号码
birthdayValue = val.charAt(6)+val.charAt(7);
if(parseInt(birthdayValue)<10)
{
birthdayValue = '20'+birthdayValue;
}
else
{
birthdayValue = '19'+birthdayValue;
}
birthdayValue=birthdayValue+'-'+val.charAt(8)+val.charAt(9)+'-'+val.charAt(10)+val.charAt(11);
if(parseInt(val.charAt(14)/2)*2!=val.charAt(14))
document.all.sex.value='男';
else
document.all.sex.value='女';
document.all.birthday.value=birthdayValue;
}
if(18==val.length)
{ //18位身份证号码
birthdayValue=val.charAt(6)+val.charAt(7)+val.charAt(8)+val.charAt(9)+'-'+val.charAt(10)+val.charAt(11)
+'-'+val.charAt(12)+val.charAt(13);
if(parseInt(val.charAt(16)/2)*2!=val.charAt(16))
document.all.sex.value='男';
else
document.all.sex.value='女';
if(val.charAt(17)!=IDCard(val))
{
document.all.idCard.style.backgroundColor='#ffc8c8';
}
else
{
document.all.idCard.style.backgroundColor='white';
}
document.all.birthday.value=birthdayValue;
}
}
// 18位身份证号最后一位校验
function IDCard(Num)
{
if (Num.length!=18)
return false;
var x=0;
var y='';
for(i=18;i>=2;i--)
x = x + (square(2,(i-1))%11)*parseInt(Num.charAt(19-i-1));
x%=11;
y=12-x;
if (x==0)
y='1';
if (x==1)
y='0';
if (x==2)
y='X';
return y;
}
// 求得x的y次方
function square(x,y)
{
var i=1;
for (j=1;j<=y;j++)
i*=x;
return i;
}
这段代码是别人给我的,但是我看不懂,能帮我解释下吗?越详细越好,非常感谢
C#判断身份证
答案:1 悬赏:0 手机版
解决时间 2021-03-04 18:53
- 提问者网友:椧運幽默
- 2021-03-03 20:33
最佳答案
- 五星知识达人网友:往事隔山水
- 2021-03-03 22:02
首先这是 javascript 的代码,不属于 C#
130503 670401 001
其次你要明白15位身份证的组成
第一部分是地区代码,第二部分是生日,第三部分是序列号男单女双
不废话,看解释,已有的不解释
后添加的注释 带 /// 三个斜杠
function showBirthday(val)
{
var birthdayValue; /// 声明变量
if(15==val.length)
{ //15位身份证号码
birthdayValue = val.charAt(6)+val.charAt(7); /// 取第二部分的前两个数
if(parseInt(birthdayValue)<10) /// 如果小于 10
{
birthdayValue = '20'+birthdayValue; /// 在刚取到的值前面加 字符串 "20"
}
else /// 否则,即大于 10
{
birthdayValue = '19'+birthdayValue; /// 在刚取到的值前面加 字符串 "19"
}
/// 下面一句,8和9分别取的是第二部分的3和4位数,10和11是5和6位数,然后进行拼接
birthdayValue=birthdayValue+'-'+val.charAt(8)+val.charAt(9)+'-'+val.charAt(10)+val.charAt(11);
/// 下面一句,判断最后一位是奇数还是偶数,用的是对 2 取整然后再乘以2再跟原值比较的方法
if(parseInt(val.charAt(14)/2)*2!=val.charAt(14))
document.all.sex.value='男';
else
document.all.sex.value='女';
document.all.birthday.value=birthdayValue; /// 这里是赋值
}
if(18==val.length)
{ //18位身份证号码
/// 相对的 18位就简单的多了,你只要知道 下标是从0开始数就可以,下面是字符串拼接
birthdayValue=val.charAt(6)+val.charAt(7)+val.charAt(8)+val.charAt(9)+'-'+val.charAt(10)+val.charAt(11) +'-'+val.charAt(12)+val.charAt(13);
/// 下面一句,还是老方法判断奇偶数来确定性别
if(parseInt(val.charAt(16)/2)*2!=val.charAt(16))
document.all.sex.value='男';
else
document.all.sex.value='女';
/// 下面的判断是通过验证最后一位数来控制背景颜色的
if(val.charAt(17)!=IDCard(val))
{
document.all.idCard.style.backgroundColor='#ffc8c8';
}
else
{
document.all.idCard.style.backgroundColor='white';
}
document.all.birthday.value=birthdayValue; /// 赋值
}
}
// 18位身份证号最后一位校验
function IDCard(Num)
{
if (Num.length!=18) /// 如果不是18位身份证,不进行验证
return false;
var x=0;
var y='';
/// 最后这个方法有点云里雾里,好像有什么公式在里面
for(i=18;i>=2;i--)
x = x + (square(2,(i-1))%11)*parseInt(Num.charAt(19-i-1));
x%=11;
y=12-x;
if (x==0)
y='1';
if (x==1)
y='0';
if (x==2)
y='X';
return y;
}
// 求得x的y次方
function square(x,y)
{
var i=1;
for (j=1;j<=y;j++)
i*=x;
return i;
}
特殊赋值表达式,i+=1 就是 i=i+1,-=,*=,/=,%=是同理
有点事要走开一会
希望对你能有所帮助
130503 670401 001
其次你要明白15位身份证的组成
第一部分是地区代码,第二部分是生日,第三部分是序列号男单女双
不废话,看解释,已有的不解释
后添加的注释 带 /// 三个斜杠
function showBirthday(val)
{
var birthdayValue; /// 声明变量
if(15==val.length)
{ //15位身份证号码
birthdayValue = val.charAt(6)+val.charAt(7); /// 取第二部分的前两个数
if(parseInt(birthdayValue)<10) /// 如果小于 10
{
birthdayValue = '20'+birthdayValue; /// 在刚取到的值前面加 字符串 "20"
}
else /// 否则,即大于 10
{
birthdayValue = '19'+birthdayValue; /// 在刚取到的值前面加 字符串 "19"
}
/// 下面一句,8和9分别取的是第二部分的3和4位数,10和11是5和6位数,然后进行拼接
birthdayValue=birthdayValue+'-'+val.charAt(8)+val.charAt(9)+'-'+val.charAt(10)+val.charAt(11);
/// 下面一句,判断最后一位是奇数还是偶数,用的是对 2 取整然后再乘以2再跟原值比较的方法
if(parseInt(val.charAt(14)/2)*2!=val.charAt(14))
document.all.sex.value='男';
else
document.all.sex.value='女';
document.all.birthday.value=birthdayValue; /// 这里是赋值
}
if(18==val.length)
{ //18位身份证号码
/// 相对的 18位就简单的多了,你只要知道 下标是从0开始数就可以,下面是字符串拼接
birthdayValue=val.charAt(6)+val.charAt(7)+val.charAt(8)+val.charAt(9)+'-'+val.charAt(10)+val.charAt(11) +'-'+val.charAt(12)+val.charAt(13);
/// 下面一句,还是老方法判断奇偶数来确定性别
if(parseInt(val.charAt(16)/2)*2!=val.charAt(16))
document.all.sex.value='男';
else
document.all.sex.value='女';
/// 下面的判断是通过验证最后一位数来控制背景颜色的
if(val.charAt(17)!=IDCard(val))
{
document.all.idCard.style.backgroundColor='#ffc8c8';
}
else
{
document.all.idCard.style.backgroundColor='white';
}
document.all.birthday.value=birthdayValue; /// 赋值
}
}
// 18位身份证号最后一位校验
function IDCard(Num)
{
if (Num.length!=18) /// 如果不是18位身份证,不进行验证
return false;
var x=0;
var y='';
/// 最后这个方法有点云里雾里,好像有什么公式在里面
for(i=18;i>=2;i--)
x = x + (square(2,(i-1))%11)*parseInt(Num.charAt(19-i-1));
x%=11;
y=12-x;
if (x==0)
y='1';
if (x==1)
y='0';
if (x==2)
y='X';
return y;
}
// 求得x的y次方
function square(x,y)
{
var i=1;
for (j=1;j<=y;j++)
i*=x;
return i;
}
特殊赋值表达式,i+=1 就是 i=i+1,-=,*=,/=,%=是同理
有点事要走开一会
希望对你能有所帮助
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯