Re: [爆卦] 小商人发文啦 (青青最新发文)

楼主: sxy67230 (charlesgg)   2022-01-20 13:02:33
※ 引述《sceleton (台科日乱写)》之铭言:
: ※ 引述《kawazakiz2 (轮蛇)》之铭言:
: 小商人也真坏,要码也不码的干净一点
: 某一张照片可以看到身分证后4码
: https://shorturl.at/emuBR
: 再加上之前有乡民PO的地籍誊本
: https://www.ptt.cc/bbs/Gossiping/M.1642598409.A.10F.html
: "假设"两者是同一个人的身份证字号,那我们就已经得到了开头字母,前三码跟后四码
: (先说好,以上都是引用跟假设)
: 这让我想到资工一个很基本的练习题,叫做身份证字号验算
: (身分证最后一码是检查码,公式是公开的)
: 我们用python来练习吧
: 其实只找两个数字的话是有数学解的,不需要用暴力法跑到O(n2)
: 不过为了好理解python跟身份证字号公式,我们还是用暴力法来练习
: preId = "F230"
: postId = "2551"
: remainder = 10 - 1
: # F = 15
: # refer wiki for calculation rule
: sumOfKnownNum = 1 * 1 + 5 * 9 + 2 * 8 + 3 * 7 + 0 * 6 + 2 * 3 + 5 * 2 + 5 *
1
: i = 1
: for _4thNum in range(10):
: for _5thNum in range(10):
: sum = sumOfKnownNum + _4thNum * 5 + _5thNum * 4
: if sum % 10 == remainder:
: print(f"{i:2d}: {preId}{_4thNum}{_5thNum}{postId}, sum is {sum}"
)
: i += 1
: 然后就可以得到8组可能的结果
: 1: F230102551, sum is 109
: 2: F230152551, sum is 129
: 3: F230302551, sum is 119
: 4: F230352551, sum is 139
: 5: F230502551, sum is 129
: 6: F230552551, sum is 149
: 7: F230702551, sum is 139
: 8: F230752551, sum is 159
: 以上,python暖身结束,大家有兴趣来学写程式了吗?
岔个题,如果是使用python的话,可以使用python各种内置组件像combination_with_rep
lacement来快速排列组合,然后再使用numpy直接进行矩阵加和跟余数计算,最后做filte
r即可。这样速度可以快上很多喔!
公式解当然会快很多,但是推荐小朋友们可以善用python的library,小朋友学会了吗?
☺ ☺

Links booklink

Contact Us: admin [ a t ] ucptt.com