下载地址:https://www.pan38.com/dow/share.php?code=JCnzE 提取密码:1982

项目包含三个主要模块:快递单号生成器核心逻辑、Flask Web应用程序和前端HTML页面。核心模块可以生成符合各大快递公司格式的虚拟单号,并模拟完整的物流信息流转过程。Web应用提供了API接口,前端页面则提供了友好的用户交互界面。

import randomimport timeimport hashlibfrom datetime import datetime, timedelta

class ExpressGenerator: def init(self): self.carriers = {

'顺丰': 'SF', '中通': 'ZTO', '圆通': 'YTO', '申通': 'STO', '韵达': 'YD', '邮政': 'EMS', '京东': 'JD' } self.regions = ['北京','上海','广州','深圳','杭州','成都','武汉','西安']

def generate_tracking_number(self, carrier):

prefix = self.carriers.get(carrier, 'SF')

timestamp = str(int(time.time() * 1000))[-8:]

random_num = ''.join([str(random.randint(0,9)) for _ in range(6)])

check_digit = self._calculate_check_digit(prefix + timestamp + random_num)

return prefix + timestamp + random_num + check_digit

def _calculate_check_digit(self, s):

md5 = hashlib.md5(s.encode()).hexdigest()

return md5[-1].upper()

def generate_logistics_info(self, tracking_number):

statuses = [

"已揽收",

"运输中",

"到达分拣中心",

"派送中",

"已签收"

]

current_time = datetime.now()

logistics = []

for i, status in enumerate(statuses):

time_delta = timedelta(hours=random.randint(1, 12))

current_time += time_delta

location = random.choice(self.regions)

if status == "已揽收":

detail = f"包裹已被{location}网点揽收"

elif status == "运输中":

detail = f"包裹正在从{location}发往{random.choice(self.regions)}"

elif status == "到达分拣中心":

detail = f"包裹已到达{location}分拣中心"

elif status == "派送中":

detail = f"{location}快递员XXX(电话138****1234)正在派件"

else:

detail = "收件人本人签收"

logistics.append({

"time": current_time.strftime("%Y-%m-%d %H:%M:%S"),

"status": status,

"location": location,

"detail": detail

})

if random.random() < 0.3 and i < len(statuses)-1:

current_time += timedelta(hours=random.randint(1, 6))

logistics.append({

"time": current_time.strftime("%Y-%m-%d %H:%M:%S"),

"status": "运输中",

"location": random.choice(self.regions),

"detail": f"包裹正在从{location}发往{random.choice(self.regions)}"

})

return logistics

flask import Flask, render_template, request, jsonifyfrom express_generator import ExpressGeneratorimport json

app = Flask(name)generator = ExpressGenerator()

@app.route('/')def index(): return render_template('index.html', carriers=generator.carriers.keys())

@app.route('/generate', methods=['POST'])def generate(): data = request.json carrier = data.get('carrier', '顺丰') tracking_number = generator.generate_tracking_number(carrier) logistics = generator.generate_logistics_info(tracking_number) return jsonify({

'tracking_number': tracking_number, 'logistics': logistics, 'carrier': carrier })

@app.route('/batch_generate', methods=['POST'])def batchgenerate(): data = request.json count = min(int(data.get('count', 5)), 20) carrier = data.get('carrier', '顺丰') results = [] for in range(count): tracking_number = generator.generate_tracking_number(carrier) logistics = generator.generate_logistics_info(tracking_number) results.append({

'tracking_number': tracking_number, 'logistics': logistics, 'carrier': carrier }) return jsonify(results)

if name == 'main': app.run(debug=True)