使用场景:
1. 利用手机的相机功能,扫描WiFi二维码直连;
2. 离线,不使用三方服务器,保证隐私安全;
1. 安装Python
过程不表,请自行解决;
2. 安装依赖
pip install qrcode[pil]
3. 生成脚本(wifi_qr.py)
import qrcode
from qrcode.constants import ERROR_CORRECT_M
def _escape_wifi_value(s: str) -> str:
"""
Escape special chars for WIFI QR payload.
According to common implementations, escape: \ ; , :
"""
if s is None:
return ""
return (
s.replace("\\", "\\\\")
.replace(";", r"\;")
.replace(",", r"\,")
.replace(":", r"\:")
)
def build_wifi_payload(ssid: str, password: str, encryption: str, hidden: bool = False) -> str:
"""
Build WiFi QR payload:
WIFI:T:<auth>;S:<ssid>;P:<password>;H:<hidden>;;
encryption supports: WPA / WEP / 无加密 / WPA2-个人
"""
if not ssid:
raise ValueError("SSID 不能为空")
enc = encryption.strip().upper()
# Map user-friendly encryption to QR standard tokens
if encryption in ("无加密", "无", "NONE", "NOPASS"):
auth = "nopass"
password = "" # must be empty
elif encryption in ("WPA2-个人", "WPA2个人", "WPA2-PERSONAL", "WPA2-PSK"):
auth = "WPA" # QR standard uses WPA for WPA/WPA2 Personal
elif enc == "WPA":
auth = "WPA"
elif enc == "WEP":
auth = "WEP"
else:
raise ValueError("encryption 只支持:WPA / WEP / 无加密 / WPA2-个人")
ssid_esc = _escape_wifi_value(ssid)
pwd_esc = _escape_wifi_value(password or "")
payload = f"WIFI:T:{auth};S:{ssid_esc};P:{pwd_esc};H:{'true' if hidden else 'false'};;"
return payload
def make_wifi_qr(
ssid: str,
password: str,
encryption: str,
out_file: str = "wifi_qr.png",
hidden: bool = False,
box_size: int = 10,
border: int = 4
):
payload = build_wifi_payload(ssid, password, encryption, hidden=hidden)
qr = qrcode.QRCode(
version=None,
error_correction=ERROR_CORRECT_M,
box_size=box_size,
border=border,
)
qr.add_data(payload)
qr.make(fit=True)
img = qr.make_image(fill_color="black", back_color="white")
img.save(ssid + "_" + out_file)
return payload
if __name__ == "__main__":
# 示例:改成你的 Wi-Fi 信息
ssid = "MyWiFi"
password = "MyPassword123"
encryption = "WPA2-个人" # 可选:WPA / WEP / 无加密 / WPA2-个人
out_file = "wifi_qr.png"
payload = make_wifi_qr(ssid, password, encryption, out_file=out_file)
print("已生成:", out_ssid + "_" + out_file)
# print("二维码内容:", payload)
4. 运行
python wifi_qr.py
会输出并生成 wifi_qr.png。
5. 常见问题
无加密:T:nopass 且 P: 必须为空(脚本已处理)。
SSID/密码里如果有 ; , : \ 等字符需要转义(脚本已处理)。
“WPA2-个人”扫码连接时通常仍用 T:WPA 表示(这是行业通用写法)
6. 说明
代码层面只使用了本地库:qrcode、Pillow,没有任何网络相关代码。
二维码里只是一个明文字符串,不会自动发送到任何服务器,例如:
WIFI:T:WPA;S:MyWiFi;P:MyPassword123;;
扫码时,是手机系统本地解析,然后调用系统的 Wi-Fi 连接界面不需要互联网。
1800

被折叠的 条评论
为什么被折叠?



