永发信息网

C#判断身份证

答案:1  悬赏:0  手机版
解决时间 2021-03-04 18:53
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;
}

这段代码是别人给我的,但是我看不懂,能帮我解释下吗?越详细越好,非常感谢
最佳答案
首先这是 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,-=,*=,/=,%=是同理
有点事要走开一会
希望对你能有所帮助
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
女“唐梦霞”“万佳丽” 和男“陈源”“李攀
最大的扇形是多少度
四川长锅锅炉
为什么过年要拜猪头?
LOL寒冰怎么对线洛和霞组合
用葫芦装酒,酒或水会消散,有没有什么办法制
广西桂R是哪里啊?
涡轮增压器上设置有径向轴承和止推轴承。
华硕 H81M-D PLUS能装几个固态
电子台秤怎么用
下列特征与鸟类飞翔没有直接关系的是DA. 胸肌
83×38+38×16的简便计算
天津经济技术开发区居民煤气多少钱一个字儿?
综合性语文活动。(3分)我们热爱和平,我们
五香卤蛋太咸了有什么方法补救吗
推荐资讯
管家好太太厨卫在哪里啊,我有事要去这个地方
男朋友老向我借钱
住宅工程竣工验收前,建设单位应将??报送该
安慰人的话大全,别人伤心怎么安慰人的话句子
南美术西城分部在哪里啊,我有事要去这个地方
电池的单位名称是个还是颗
oracle 怎么查看数据被锁
中国最有名的演员是谁?
南京萤火虫什么时候
主角叫蓝天 玩了一部网游后变成了女的 现实里
赣榆影视下午放什么电视剧、是泰国的
运气不好要怎么改善啊,我是属牛的,今年是不
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?