使用Python生成WiFi二维码

使用场景:

        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 连接界面不需要互联网。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值