前提
最近在测客户相关内容,需要输入电话号码,想到之前在上一家单位写python+selenium脚本也需要输入手机号,也是用几行代码解决的,今天顺便总结一下,顺便试了随机生成身份证号码
1.生成手机号码
相对身份证,生成手机号码是比较简单的,核心思想是用到了 python 的random库,身份证相同的道理,先看代码
手机号码先定义一个列表吧,里面把常用的三位数开头写进去,后8为从0-9中随机选8位
之前用的是 mobile = num1 + ''.join(random.choice("0123456789") for i in range(8)) 这种方法,我看网上很多人也用这个方法;
这次写了第二个帮自己梳理了一下,多了好几行代码,不建议大家使用,还是使用第一种比较简洁方便
先定义一个空的列表,每次没选择一个数字都append到列表最后一位,完成后和一个空的str连接
一个随机的手机号码就这样生成了
2.生成身份证号码
相对手机号码,身份证就是多了地区码(这个可以从txt里面读取,所以不是大问题)、随机生成生日、三维随机码和一位权重码,所以只要高清原理也不是很困难
我将这部分代码分成了两部分:1.从文件读取地区码;2.随机生成生日、三位随机数和权重位
第一部分,读取地区码部分
读取地区码将地区码文件放在一个路径下,读取后split一下,然后切片取出code,相对还是很容易理解的
第二部分,随机生成生日、随机数和权重位
这边要先了解一下,身份证最后一数是怎么产生的,有下面一个公式:
s = Sum(Ai * Wi), i = 0, … , 16
last = s % 11
先对前17位数字的权求和
Ai:表示第i位置上的身份证号码数字值(0~9)
Wi:7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 (表示第i位置上的加权因子)
然后根据last,去字典中查到对应的权重码
第一部分地区code已经反悔了一个列表,从列表里面随机获取一个
第二部分生日我分开来,先从1950-2000随机获取一年,月份和日期从当前日期随机往前推0-365天,这样就随机生成了年月日
第三部分三位随机数,我也是随机取得,最后一位权重码就按上面的公式
最后看一下实际效果
print效果That's all
网友评论