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()