1、该功能需要两个库,random和phone
2、已移动手机号为例,首先导入需要的库,然后定义一个类,在init里定义移动手机号的前缀,self.yd里的手机号前三位都是属于移动的。
# coding:utf-8
import random
from phone import Phone
class CellPhoneNumber:
def __init__(self):
# 定义移动手机号前缀
self.yd = ['134', '135', '136', '137', '138', '139', '147', '150', '151', '152',
'157', '158', '159', '165', '178', '182', '183', '187', '188']
3、建mobile函数,定义空的数组,用于储存生成的手机号
def mobile(self, yds):
array = []
print('正在生成前缀是 ' + yds + ' 的手机号')
4、循环随机生成手机号后8位的数,然后把手机号的前缀和随机生成的后8位组合成一个完整的手机号
for i in range(500000):
a = random.randint(0, 9)
b = random.randint(0, 9)
c = random.randint(0, 9)
d = random.randint(0, 9)
e = random.randint(0, 9)
f = random.randint(0, 9)
g = random.randint(0, 9)
h = random.randint(0, 9)
data = str(yds) + str(a) + str(b) + str(c) + str(d) + str(e) + str(f) + str(g) + str(h)
5、判断组成的手机号是否在array数组里,如果不在,则把生成的手机号追加到array里。由于生成的手机号较多,我添加了一个生成进度的判断。
if data not in array:
array.append(data)
# 打印生成进度
if i == 124999:
print('前缀:' + str(yds) + ' 已生成 25%')
elif i == 249999:
print('前缀:' + str(yds) + ' 已生成 50%')
elif i == 375999:
print('前缀:' + str(yds) + ' 已生成 75%')
elif i == 499999:
print('前缀:' + str(yds) + ' 已生成 100%')
print('-----------------------------------------')
return array
6、再建一个call_true的函数,循环获取init里定义的值,运行上面的mobile函数生成手机号,实例化phone,phone用于判断手机号的详细信息,如果phone解析失败会返回空
定义一个空的数组,把能够解析的手机号储存起来
def call_true(self):
for i in self.yd:
data = self.mobile(i)
# print(data)
p = Phone()
true = []
7、循环获取mobile函数返回的手机号信息,并判断是否可以查询成功。查询失败表示手机号没有注册。查询成功的手机号存放到true数组里。
for d in data:
city = p.find(d)
# print(city)
if city != None:
true.append(d)
8、打开一个txt文件,把true数组里的手机号写入txt文件里
tr = open(r"C:\移动" + str(i) + ".txt", 'w')
for t in true:
tr.write(str(t) + '\n')
tr.close()
print('前缀:' + str(i) + ' 已验证并写入txt文件')
9、完整代码如下
# coding:utf-8
import random
from phone import Phone
class CellPhoneNumber:
def __init__(self):
# 定义移动手机号前缀
self.yd = ['134', '135', '136', '137', '138', '139', '147', '150', '151', '152',
'157', '158', '159', '165', '178', '182', '183', '187', '188']
def mobile(self, yds):
array = [] # 定义空的数组,用于储存生成的手机号
print('正在生成前缀是 ' + yds + ' 的手机号')
for i in range(500000): # 循环50万次,获取手机号前三位以后的值
# a-h是随机生成的手机号后8位变量
a = random.randint(0, 9)
b = random.randint(0, 9)
c = random.randint(0, 9)
d = random.randint(0, 9)
e = random.randint(0, 9)
f = random.randint(0, 9)
g = random.randint(0, 9)
h = random.randint(0, 9)
# 合并所有的随机数
data = str(yds) + str(a) + str(b) + str(c) + str(d) + str(e) + str(f) + str(g) + str(h)
if data not in array: # array里没有已存在的随机手机号,则添加到array数组里
array.append(data)
# 打印生成进度
if i == 124999:
print('前缀:' + str(yds) + ' 已生成 25%')
elif i == 249999:
print('前缀:' + str(yds) + ' 已生成 50%')
elif i == 375999:
print('前缀:' + str(yds) + ' 已生成 75%')
elif i == 499999:
print('前缀:' + str(yds) + ' 已生成 100%')
print('-----------------------------------------')
return array
def call_true(self):
for i in self.yd: # 循环获取移动手机号前缀
data = self.mobile(i) # 生成移动手机号
# print(data)
p = Phone() # Phone实例化
true = [] # 定义空的数组,用于储存已验证的移动手机号
for d in data: # 循环获取生成的移动手机号
city = p.find(d) # 获取手机号的信息
# print(city)
if city != None: # 当前手机号信息可以查到,则添加到true数组里
true.append(d)
# 打开一个txt文件,把所有移动手机号储存到txt文本里,然后关闭文件
tr = open(r"C:\移动" + str(i) + ".txt", 'w')
for t in true:
tr.write(str(t) + '\n')
tr.close()
print('前缀:' + str(i) + ' 已验证并写入txt文件')
cell = CellPhoneNumber()
cell.call_true()