下载地址:https://www.pan38.com/dow/share.php?code=JCnzE 提取密码:1133
这个虚拟物流单号生成系统包含以下功能:
支持多种主流快递公司的单号生成
生成符合各快递公司格式的虚拟单号
模拟完整的物流轨迹信息
提供Web界面展示生成的物流信息
包含简单的前端交互界面
使用方法:
安装依赖:pip install flask
运行程序:python virtual_logistics.py
访问 http://localhost:5000 使用生成器
注意:本系统生成的物流信息仅供测试和学习使用,请勿用于非法用途。
import random
import datetime
import string
from flask import Flask, render_template, request, jsonify
app = Flask(name)
快递公司代码映射
COURIER_CODES = {
'SF': '顺丰速运',
'STO': '申通快递',
'YTO': '圆通速递',
'ZTO': '中通快递',
'YD': '韵达快递',
'EMS': '邮政EMS',
'HHTT': '天天快递',
'JD': '京东物流'
}
class LogisticsGenerator:
def init(self):
self.regions = {
'华北': ['北京', '天津', '河北', '山西', '内蒙古'],
'华东': ['上海', '江苏', '浙江', '安徽', '福建', '江西', '山东'],
'华南': ['广东', '广西', '海南'],
'华中': ['河南', '湖北', '湖南'],
'东北': ['辽宁', '吉林', '黑龙江'],
'西北': ['陕西', '甘肃', '青海', '宁夏', '新疆'],
'西南': ['重庆', '四川', '贵州', '云南', '西藏']
}
def generate_tracking_number(self, courier_code):
"""生成快递单号"""
if courier_code not in COURIER_CODES:
courier_code = random.choice(list(COURIER_CODES.keys()))
# 基础单号结构:公司代码+日期+随机数+校验码
date_part = datetime.datetime.now().strftime('%Y%m%d')
random_part = ''.join(random.choices(string.digits, k=8))
tracking_number = f"{courier_code}{date_part}{random_part}"
# 计算简单校验码
checksum = sum(ord(c) for c in tracking_number) % 10
tracking_number += str(checksum)
return tracking_number
def generate_address(self):
"""生成随机地址"""
region = random.choice(list(self.regions.keys()))
province = random.choice(self.regions[region])
cities = {
'北京': ['北京市'],
'上海': ['上海市'],
'天津': ['天津市'],
'重庆': ['重庆市'],
'河北': ['石家庄', '唐山', '秦皇岛', '邯郸', '邢台', '保定', '张家口', '承德', '沧州', '廊坊', '衡水'],
# 其他省份城市数据省略...
}.get(province, [f"{province}市"])
city = random.choice(cities)
districts = ['朝阳区', '海淀区', '东城区', '西城区', '丰台区', '石景山区', '通州区', '顺义区']
street = random.choice(['中山路', '解放路', '人民路', '建设路', '和平路', '新华路'])
number = random.randint(1, 999)
return f"{province}{city}{random.choice(districts)}{street}{number}号"
def generate_logistics_info(self, tracking_number, courier_code):
"""生成物流信息"""
current_time = datetime.datetime.now()
steps = []
# 收件
steps.append({
'time': current_time.strftime('%Y-%m-%d %H:%M:%S'),
'location': self.generate_address(),
'status': '快递员已揽收',
'detail': f"{COURIER_CODES[courier_code]}快递员已收件"
})
# 运输中
for i in range(random.randint(2, 5)):
current_time += datetime.timedelta(hours=random.randint(1, 12))
steps.append({
'time': current_time.strftime('%Y-%m-%d %H:%M:%S'),
'location': self.generate_address(),
'status': '运输中',
'detail': '快件已到达中转中心'
})
# 派送
current_time += datetime.timedelta(hours=random.randint(1, 6))
steps.append({
'time': current_time.strftime('%Y-%m-%d %H:%M:%S'),
'location': self.generate_address(),
'status': '派送中',
'detail': '快递员正在派件'
})
# 签收
current_time += datetime.timedelta(hours=random.randint(1, 3))
steps.append({
'time': current_time.strftime('%Y-%m-%d %H:%M:%S'),
'location': steps[-1]['location'],
'status': '已签收',
'detail': '收件人已签收'
})
return steps
@app.route('/')
def index():
return render_template('index.html', couriers=COURIER_CODES)
@app.route('/generate', methods=['POST'])
def generate():
courier_code = request.form.get('courier', random.choice(list(COURIER_CODES.keys())))
generator = LogisticsGenerator()
tracking_number = generator.generate_tracking_number(courier_code)
logistics_info = generator.generate_logistics_info(tracking_number, courier_code)
return jsonify({
'success': True,
'courier': COURIER_CODES[courier_code],
'tracking_number': tracking_number,
'logistics_info': logistics_info
})
if name == 'main':
app.run(debug=True)