记一次通过号段生成手机号的python并生成对应md5导入数据库

本文介绍了如何使用Python和多线程技术生成手机号码、计算MD5哈希,并将结果保存到MySQL数据库。代码涉及生成号码、MD5哈希计算、数据库连接及并发处理,还提供了优化建议如错误处理和性能调整。

这个代码示例展示了如何使用Python和多线程来生成手机号码、计算MD5哈希,并将结果保存到MySQL数据库中。这个程序的主要功能包括:

  1. 生成号码:根据指定的前缀和范围生成一系列11位手机号码。
  2. 计算MD5哈希:为每个电话号码计算其MD5哈希值。
  3. 保存到数据库:将生成的手机号码及其MD5哈希保存到MySQL数据库中。
  4. 多线程处理:使用ThreadPoolExecutor进行多线程并发,支持同时处理多个号段,提高效率。

代码的核心部分

  • 号码生成generate_phone_numbers函数根据前缀和起始、结束后缀生成一系列电话号码。
  • MD5哈希md5_hash函数用于计算字符串的MD5哈希值。
  • 保存到数据库save_to_database函数连接到MySQL数据库,并将生成的号码及其MD5哈希存储在一个表中。
  • 多线程处理process_phone_range函数用于处理一个号段的电话号码,并将其保存到数据库。

注意事项

  • MySQL连接:确保在运行代码前,数据库连接信息正确,包括主机、用户、密码和数据库名。
  • 表格文件:代码从Excel文件中读取号段信息。确保输入的Excel文件格式正确,并且包含“号段”列。
  • 多线程:多线程并发可能导致数据库连接问题,确保数据库配置可以处理并发请求。

优化建议

  • 错误处理:添加更多的错误处理,以应对可能出现的数据库连接问题、数据完整性问题等。
  • 性能优化:在多线程场景中,注意数据库的连接池配置,避免连接过载。
  • 并发安全:确保多线程环境下的数据处理和写入操作是安全的,不会导致数据冲突。
  • 日志记录:增加日志记录,方便调试和监控程序运行状态。

这个代码示例适用于处理大量手机号码并将其存储到数据库的场景,但实际应用中,务必确保遵守相关法律法规,特别是与个人隐私和数据保护相关的规定。

import pandas as pd
import hashlib
import mysql.connector
from concurrent.futures import ThreadPoolExecutor


def generate_phone_numbers(prefix, start_suffix=0, end_suffix=9999):
    phone_numbers = []
    for i in range(start_suffix, end_suffix + 1):
        phone_number = prefix + str(i).zfill(4)  # 补齐至11位手机号码
        phone_numbers.append(phone_number)
    return phone_numbers


def md5_hash(text):
    md5_hash = hashlib.md5()
    md5_hash.update(text.encode('utf-8'))
    md5_hex = md5_hash.hexdigest()
    return md5_hex


def save_to_database(phone_numbers, current_count):
    conn = mysql.connector.connect(
        host='192.168.126.8',
        user='root',
        password='这是个密码',
        database='MD5-02'
    )
    cursor = conn.cursor()

    cursor.execute('''CREATE TABLE IF NOT EXISTS PhoneNumbers2
                      (ID INT AUTO_INCREMENT PRIMARY KEY, PhoneNumber VARCHAR(15), MD5Hash VARCHAR(32) UNIQUE)''')

    count = 0  # 记录写入条数
    for phone_number in phone_numbers:
        md5 = md5_hash(phone_number)
        try:
            cursor.execute("INSERT INTO PhoneNumbers2 (PhoneNumber, MD5Hash) VALUES (%s, %s)", (phone_number, md5))
            count += 1
            current_count += 1
            print(f"写入手机号码:{phone_number},当前写入数量:{current_count}", end='\r', flush=True)
        except mysql.connector.IntegrityError:
            # 如果手机号已存在,则跳过
            continue

    cursor.execute("CREATE INDEX idx_md5hash ON PhoneNumbers2 (MD5Hash)")
    conn.commit()
    conn.close()

    return current_count


def process_phone_range(prefix, current_count):
    phone_numbers = generate_phone_numbers(prefix)
    current_count = save_to_database(phone_numbers, current_count)
    return current_count


def main():
    filename = input("请输入包含号段的表格文件名(例如:phone_ranges.xlsx):")
    df = pd.read_excel(filename)

    max_workers = int(input("请输入线程数量:"))
    total_count = 0

    with ThreadPoolExecutor(max_workers=max_workers) as executor:
        futures = []
        for index, row in df.iterrows():
            prefix = str(row['号段'])
            print(f"正在处理号段:{prefix}")
            futures.append(executor.submit(process_phone_range, prefix, total_count))

        for future in futures:
            total_count = future.result()
            print(f"当前写入总数量:{total_count}")

    print("所有号段写入数据库完成")


if __name__ == "__main__":
    main()

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值