下载地址:https://www.pan38.com/dow/share.php?code=JCnzE 提取密码:1133
这个虚拟物流单号生成系统包含以下功能:支持多种主流快递公司的单号生成生成符合各快递公司格式的虚拟单号模拟完整的物流轨迹信息提供Web界面展示生成的物流信息包含简单的前端交互界面使用方法:安装依赖:pip install flask运行程序:python virtual_logistics.py访问 http://localhost:5000 使用生成器注意:本系统生成的物流信息仅供测试和学习使用,请勿用于非法用途。
import randomimport datetimeimport stringfrom 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)