企评社

二维码生成器

网址、WiFi、名片、短信/电话四种内容一次生成;二维码在你的浏览器里画出来,内容不上传、不留存

内容只在你的浏览器里生成二维码,不上传、不留存
先说清楚:二维码本身不含加密。 二维码只是把文字换一种画法,任何扫码工具都能把里面的内容原样读出来,谁看见这张图谁就看见了内容。 所以不要用它存放密码、身份证号、银行卡号等敏感信息(包括不要用这种方式分享 WiFi 密码给不特定的人); 确实需要保密时,请改用带密码的专用工具,或先把内容加密再生成二维码。本页只是"画图工具",不做也做不到加密。

文本 / 网址

网址建议带上 https://,扫码后手机才知道要用浏览器打开;内容可以是中文(本页按 UTF-8 编码)。

(用来验证中文能正常生成)

生成参数

导出 PNG 的边长。太大的二维码印在小卡片上反而扫不出来,一般 300 ~ 600 像素够用。

越高越抗污损、被遮挡也能读,但同一张二维码能装的内容越少——内容多到装不下时会提示你降低等级或缩短内容。

标准要求四周各留 4 个模块的空白,本页默认保留。改成 0 虽然图更"满",但很多扫码器会直接识别失败——不要为了省地方去掉它。

深色码点 + 浅色背景最好读(黑底白字这类反色二维码,部分扫码器不认)。两色太接近时本页会提示对比度不足。

预览与下载

预览显示的是等比缩放的图片,下载得到的是你设定尺寸的原始 PNG(文件名形如 二维码-网址-20260607120000.png)。 下载由浏览器本地完成,整页没有任何上传请求。

二维码怎么生成:容量、静默区、对比度与四类常用内容

二维码能装多少字,取决于版本与纠错等级。二维码共 40 个"版本",版本越高格子越多(版本 1 是 21×21 个模块,版本 40 是 177×177),能装的内容也越多。同样一张二维码,纠错等级越高,用来"备份"的格子越多、留给正文的就越少:最高容量出现在低纠错等级,反之要更强的抗损能力就得牺牲容量。这也是为什么"内容太长生成失败"时,最快的解决办法是把纠错等级从 H 降到 M 或 L,或者把内容缩短、改成短链接。本页用 qrcode-generator 按标准自动选版本(版本 0 表示自动),中文按 UTF-8 编码,一个汉字通常占 3 个字节,所以中文内容能装的字数大约是英文的三分之一——遇到超长内容本页会直接提示"内容太长,请缩短或改用更低的纠错等级",而不是抛出一个看不懂的错误。

为什么必须留静默区。二维码规范要求码点区域四周各留至少 4 个模块宽度的空白,这块空白叫静默区(quiet zone)。它不是浪费:扫码器先用这圈空白判断"哪里是二维码的边界",再去做定位与采样。一旦静默区被切掉或被别的图案、文字、色块填满,扫码器可能把边界认错,表现就是"图看着很清楚,手机却怎么也扫不出来"。所以做海报、名片、贴纸排版时,务必让二维码四周留出空白;本页把静默区做成参数(默认 4 个模块)并保留在导出图里,你可以调大,但不建议调成 0。

颜色对比度决定"能不能被识别",不是好看不好看的问题。扫码器先把彩色图转成灰度,再按阈值判黑判白。前景(码点)与背景的亮度差得越多,二值化越干净;反差太小,比如浅灰码点配白底、深蓝配深灰,就会有一批模块被判成"灰"而丢失,从而读不出来。稳妥的做法是深色码点配浅色背景(黑/白、深蓝/白都很好),并且别用明显的渐变或带纹理的照片当背景。本页按 WCAG 的相对亮度公式算出两色的对比度(黑配白是 21:1,白配白是 1:1),低于 3:1 会提示"对比度太低可能导致无法识别",把判断权交给你,但不假装它没问题。

WiFi 与名片二维码为什么手机一扫就懂。手机相机并不是"认识"这些内容,而是二维码里面写了一段有固定格式的纯文本:WiFi 用 WIFI:T:WPA;S:名称;P:密码;;,iPhone 与主流安卓都会解析它并弹出"加入网络",不用再口述密码;名片用 vCard(BEGIN:VCARD 开头),系统会识别成联系人并提示保存;短信和电话分别用 SMSTO:tel:。正因为是固定格式,字段里的分隔符必须正确转义——WiFi 名称或密码里含 ; , : " \ 时要加反斜杠,vCard 的每一行必须以 \r\n 结尾,否则部分机型会解析失败。本页把这几条拼装规则写成了可断言的纯函数,转义由程序完成,不需要你手写。

为什么我们不上传到服务器生成。很多"在线二维码生成"是把你的内容提交给服务器、服务器画好图再传回来——这意味着你的 WiFi 密码、手机号、地址会经过别人的服务器,还可能被记录。二维码的生成完全不需要后端:它只是一段确定的几何计算(数据编码、纠错、掩码、画格子),浏览器里几百毫秒就能算完。所以本页全程在你自己的设备上完成,没有上传接口(打开浏览器开发者工具的 Network 面板,整页不会出现任何提交请求);内容也不写进网址、localStorage 或 cookie,关掉页面就什么也不剩。需要重复使用同一个二维码时,请自己保存下载的 PNG,而不是把内容留在网页里。

常见问题

二维码能加密吗?把密码放进二维码安全吗?

不能。二维码是编码方式,不是加密方式:里面的内容对任何扫码工具都是明文的,甚至不用扫码,用普通解码软件就能读出来。所以不要把密码、身份证号、银行卡号写进二维码。WiFi 二维码虽然方便,但等于把密码亮给了每一个看到这张图的人——请只贴在可信的场合(自己家里、办公室内部),不要贴在对外开放的地方。确实需要保密时,请用带密码的专用工具,或者先把内容加密再生成二维码。

生成的图片为什么要留白边?我把静默区设成 0 会怎样?

那圈空白叫静默区,规范要求四周各留至少 4 个模块。扫码器靠它判断二维码的边界。静默区被裁掉或紧贴其它深色元素时,扫码成功率会明显下降,尤其是印在彩色背景、货架标签或名片边角上的时候。本页默认 4 个模块并把它画进导出图里,你可以调大(贴纸排版时更宽一点更好扫),但不建议调成 0。

为什么同样的内容,改成高纠错等级后提示"内容太长"?

因为纠错码和正文抢同一张二维码的空间。等级越高,用于纠错的格子越多,留给正文的容量越少。以版本 40(最大)为例,低等级大约能装 2900 多字节,最高等级只剩 1200 多字节;中文按 UTF-8 占 3 字节,折算下来差距更明显。解决办法有三个:缩短内容、把长链接换成短链接、把纠错等级降到 M 或 L。日常使用 M(约 15%)已经足够应付印刷磨损与轻微污渍。

我做的 WiFi / 名片二维码,为什么有的手机扫了没反应?

先看格式再看清晰度。WiFi 与名片都要求严格的字段格式:名称或密码里的分号、逗号、冒号、引号、反斜杠必须转义,vCard 的每一行必须以回车加换行结尾,否则系统识别不出这是"结构化内容",只会当普通文字显示。本页按标准拼装并自动转义,你可以展开下方的"将要写进二维码的原始内容"逐字核对。若格式没问题,再看是不是静默区被裁掉了、印得太小(小于 2 厘米见方会很难扫)或者颜色对比度太低。

我的内容会被上传或保存吗?为什么不做生成历史?

不会。整个生成过程在你打开的页面里完成,页面没有上传接口,也不往网址、localStorage、sessionStorage 或 cookie 里写你的内容(刷新页面就回到空白状态)。不做历史记录是刻意的:这类内容常常是 WiFi 密码、手机号、住址,留在本地存储里反而成了隐患,需要重复使用请自己保存下载的 PNG。

相关工具