背景 / 痛点: 最近折腾境外手机卡,发现部分运营商非常“硬核”,开通 eSIM 后不发二维码图片,直接发来一串 LPA:1$... 开头的激活码字符串。
虽然现在的手机也支持手动输入激活码,但总是没扫码来得方便,特别是要把码给备用机扫的时候。网上虽然有在线转二维码的工具,但考虑到 eSIM 信息包含敏感的鉴权数据,把这玩意贴到不知名的网站上生成总感觉心里不踏实。
解决方案: 于是随手搓了一个 Python 脚本,完全本地运行,断网也能用,主打一个安全放心。
脚本功能特点:
智能识别输入:不管你是规规矩矩选菜单,还是手快直接把 LPA: 开头的一长串代码粘贴进去了,程序都能自动识别并处理,不用重新打开。
支持分段输入:如果你只有 SM-DP+ 地址和 Activation Code,也可以分步输入,自动拼接。
防覆盖机制:生成的图片会自动命名为 esim_qr.png,如果文件已存在,会自动顺延生成 esim_qr_1.png、esim_qr_2.png,不用担心之前的码被覆盖。
依赖简单:基于 qrcode 库。
环境要求:
安装 Python
安装依赖库:pip install qrcode[pil]
代码分享: 直接保存为 gen_esim.py 即可运行。
Python
import qrcodeimport sysimport osdef get_unique_filename(base_name="esim_qr", ext=".png"): """ 生成唯一的文件名,防止覆盖已有图片。 如果 esim_qr.png 存在,则尝试 esim_qr_1.png,以此类推。 """ filename = f"{base_name}{ext}" if not os.path.exists(filename): return filename counter = 1 while True: filename = f"{base_name}_{counter}{ext}" if not os.path.exists(filename): return filename counter += 1def generate_esim_qr(): print("--- eSIM QR Code Generator (Local & Safe) ---") # 1. 获取输入 (智能判断) print("请选择输入方式,或者直接在此处粘贴 LPA 字符串:") print("1. 手动粘贴 LPA 字符串") print("2. 分别输入服务器地址和激活码") # 去除首尾空格 user_input = input("\n请输入(1/2) 或 直接粘贴代码: ").strip() final_lpa_string = "" # 情况 A: 智能识别用户直接粘贴了长代码 if user_input.upper().startswith("LPA:"): print("\n[检测到已直接粘贴 LPA 字符串]") final_lpa_string = user_input # 情况 B: 用户输入 1 elif user_input == '1': raw_input = input("\n请粘贴完整的 LPA 字符串: ").strip() final_lpa_string = raw_input # 情况 C: 用户输入 2 (分段输入) elif user_input == '2': sm_dp = input("\n请输入 SM-DP+ 地址 (例如 rsp.life.ch): ").strip() act_code = input("请输入激活码 (Activation Code): ").strip() # 自动拼接标准格式 final_lpa_string = f"LPA:1${sm_dp}${act_code}" # 情况 D: 无效输入 else: print("\n❌ 无效的选择或格式错误。") sys.exit() if not final_lpa_string: print("错误:内容为空!") sys.exit() # 2. 生成二维码 print(f"\n正在处理数据...") qr = qrcode.QRCode( version=1, # 使用中等纠错(M),在保证可读性的同时控制密度 error_correction=qrcode.constants.ERROR_CORRECT_M, box_size=10, border=4, ) qr.add_data(final_lpa_string) qr.make(fit=True) # 3. 保存文件 (自动处理文件名,防覆盖) try: save_filename = get_unique_filename() img = qr.make_image(fill_color="black", back_color="white") img.save(save_filename) print(f"\n✅ 成功!二维码已保存为: 【 {save_filename} 】") print(f"文件位于当前脚本运行目录下,请用手机直接扫描。") except Exception as e: print(f"\n❌ 保存失败: {e}")if __name__ == "__main__": try: generate_esim_qr() except KeyboardInterrupt: print("\n程序已取消。")使用提示: 生成的二维码图片就在脚本同级目录下。用完记得保管好或者删除图片,毕竟这也是你的卡片密钥。
有改进空间也欢迎大家给出建议
希望对经常折腾 eSIM 的朋友有帮助!
评论 (0)