鱼C论坛

 找回密码
 立即注册
查看: 2822|回复: 14

[每日一练] 算法44 ◉‿◉ 编写函数,实现对身份证号码最后一位的验证

[复制链接]
发表于 2017-6-17 06:17:48 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 不二如是 于 2017-6-17 08:22 编辑


                               
登录/注册后可看大图


按照提示,完成代码,秀秀你的编程能力!

不许看答案,否则打屁屁





程序分析:
        二代身份证号码为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。所以,可以判定此身份证号码的最后一位是合格的。
       


源代码:
游客,如果您要查看本帖隐藏内容请回复

Snip20170617_175.png






如果喜欢,请订阅
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-6-17 12:42:59 | 显示全部楼层
以前做过这样的练习,再来一遍。
  1. def idum(string):
  2.     fac = (7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2) #给出各位的系数
  3.     sum1 = sum([int(x) * y for x, y in zip(string[:-1], fac)]) #将这17位数字和系数相乘的结果相加
  4.     mod = (12 - sum1) % 11 #余数对于号码不做列表了,直接用减法
  5.     if (mod == 10 and string[-1].upper() == 'X')  or str(mod) == string[-1]:
  6.         return True
  7.     return False
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-6-17 12:51:42 | 显示全部楼层
冬雪雪冬 发表于 2017-6-17 12:42
以前做过这样的练习,再来一遍。


再玩弄数字方面,js就像原始人。。。

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-17 12:57:14 | 显示全部楼层
不二如是 发表于 2017-6-17 12:51
再玩弄数字方面,js就像原始人。。。

各有所长,最近在学习delphi,就感觉其字符串的处理函数远逊于python。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-6-5 11:47:51 | 显示全部楼层
这种计算量还是用excel最方便啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-6-29 02:19:27 | 显示全部楼层
学习学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-20 11:47:48 | 显示全部楼层
阿萨德
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-25 10:26:12 | 显示全部楼层
em
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-9-30 11:49:42 | 显示全部楼层
6666
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-9-30 18:20:58 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-9-30 19:16:08 | 显示全部楼层
emmm  请问下 怎么把输入的18位身份证号码 转换成一个一一对应长度为18的数组呢。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-4-9 12:39:57 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-12 10:34:34 | 显示全部楼层
看看源代码,学习一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-25 00:23:25 | 显示全部楼层
<script>
        let x=prompt("输入身份证号:");
        let sum=0;
        let l=[1,0,"X",9,8,7,6,5,4,3,2];
        x=x.toString();
        for(let i=0;i<17;i++){
            j=parseInt(x[i]);
            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[y]
        console.log(last)
    </script>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-25 00:26:35 | 显示全部楼层
<script>
        let x=prompt("输入身份证号:");
        let sum=0;
        let l=[1,0,"X",9,8,7,6,5,4,3,2],c=[7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2];
        x=x.toString();
        for(let i=0;i<17;i++){
            j=parseInt(x[i]);
            sum+=j*c[i]
        }
        y=sum%11;
        last=l[y]
        console.log(last)
    </script>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-25 02:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表