算法44 ◉‿◉ 编写函数,实现对身份证号码最后一位的验证
本帖最后由 不二如是 于 2017-6-17 08:22 编辑http://xxx.fishc.com/forum/201705/05/225545py2j222x5z6x55n2.png
按照提示,完成代码,秀秀你的编程能力!
不许看答案,否则打屁屁
程序分析:
二代身份证号码为18位,其最后一位(第18位)的计算方法为:
将前面的身份证号码17位数分别乘以不同的系数。从第一位到第十七位的系数分别为:
7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2,将这17位数字和系数相乘的结果相加。
用加出来和除以11,看余数是多少?
余数只可能有0-1-2-3-4-5-6-7-8-9-10这11个数字。每个数字所对应的最后一位身份证的号码为:1-0-X-9-8-7-6-5-4-3-2。即,如果余数是2,就会在身份证的第18位数字上出现罗马数字的X。如果余数是10,身份证的最后一位号码就是2。
例如:某男性的身份证号码是34052419800101001X。验证其最后一位是否正确时,首先需要得出前17位的乘积和是189,然后用189除以11得出的结果是17+2/11,也就是说其余数是2。最后通过对应规则就可以知道余数2对应的数字是x。所以,可以判定此身份证号码的最后一位是合格的。
源代码:
**** Hidden Message *****
○面试题索引贴●
如果喜欢,请订阅{:10_303:} :
HTML5 - 庖丁解牛 + JavaScript - 庖丁解牛
以前做过这样的练习,再来一遍。
def idum(string):
fac = (7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2) #给出各位的系数
sum1 = sum(, fac)]) #将这17位数字和系数相乘的结果相加
mod = (12 - sum1) % 11 #余数对于号码不做列表了,直接用减法
if (mod == 10 and string[-1].upper() == 'X')or str(mod) == string[-1]:
return True
return False 冬雪雪冬 发表于 2017-6-17 12:42
以前做过这样的练习,再来一遍。
再玩弄数字方面,js就像原始人。。。
不二如是 发表于 2017-6-17 12:51
再玩弄数字方面,js就像原始人。。。
各有所长,最近在学习delphi,就感觉其字符串的处理函数远逊于python。 这种计算量还是用excel最方便啊 学习学习 阿萨德 em 6666 {:5_90:} emmm请问下 怎么把输入的18位身份证号码 转换成一个一一对应长度为18的数组呢。 {:5_102:} 看看源代码,学习一下 <script>
let x=prompt("输入身份证号:");
let sum=0;
let l=;
x=x.toString();
for(let i=0;i<17;i++){
j=parseInt(x);
switch (i) {
case 0:
sum+=7*j;
break;
case 1:
sum+=9*j;
break;
case 2:
sum+=10*j;
break;
case 3:
sum+=5*j;
break;
case 4:
sum+=8*j;
break;
case 5:
sum+=4*j;
break;
case 6:
sum+=2*j;
break;
case 7:
sum+=1*j;
break;
case 8:
sum+=6*j;
break;
case 9:
sum+=3*j;
break;
case 10:
sum+=7*j;
break;
case 11:
sum+=9*j;
break;
case 12:
sum+=10*j;
break;
case 13:
sum+=5*j;
break;
case 14:
sum+=8*j;
break;
case 15:
sum+=4*j;
break;
case 16:
sum+=2*j;
break;
}
}
y=sum%11;
last=l
console.log(last)
</script> <script>
let x=prompt("输入身份证号:");
let sum=0;
let l=,c=;
x=x.toString();
for(let i=0;i<17;i++){
j=parseInt(x);
sum+=j*c
}
y=sum%11;
last=l
console.log(last)
</script>
页:
[1]