这个页面的代码没跑起来。

直接从文件夹里打开 index.html,浏览器会拦下 JavaScript 模块,于是你选好内容之后,页面不会有任何反应。改用 http 把这个文件夹提供出去:

powershell -ExecutionPolicy Bypass -File serve.ps1

然后打开 http://localhost:8080/。

二维码与条形码 离线生成二维码和条码

打进去,就变成一个码。生成过程不往外送任何东西。

语言: 简体中文
查看源码
你的码和码里的文字在浏览器里处理,无须上传处理。

二维码不过是对一串字符做算术,没有文件要送,也没有服务要求人。选模式、定版本、算里德所罗门纠错、挑掩码、排条码的粗细条、算下面那位校验码,每一步都发生在这个页面里,一千来行你能读的 JavaScript。这个工具没有任何联网功能。这一条在这儿比在别的页面更要紧,因为被编进码里的,常常是一个 Wi-Fi 密码。

实时检查: 检查中…

离线: 检查中…

别信我们嘴上说的。打开开发者工具,盯着“网络”面板,往 Wi-Fi 那个表单里打一个密码。没有一条请求带走它的哪怕一个字符。或者干脆拔掉网线,照生成不误。

1 挑码的种类

二维码什么都装得下,也是手机摄像头默认要找的东西。条形码装的是一串数字,而且要哪一种,通常轮不到你决定,商店、仓库或者货运公司要什么就是什么。

2 说清楚码里装什么

这个码里将要装的那串字符
 

3 决定它长什么样

留白是码的一部分,不是码周围的空地。规范要的是四个模块,一个被裁到边的码,很多扫描器根本看不见。

在下面印出字符 扫描器读不出来的时候,得靠人来读。零售条码上还有几位数字落在留白里,那是故意的,它们标出了谁都不该裁掉的那片空白。

加一位校验字符 Code 39 一般不带这个。有些系统非要不可,只有你那套确实要,才加上,因为不期待它的读取器会把它当成末尾多出来的一个字符。

干脆不要背景 透明,用来放在本来就有颜色的东西上。SVG 和 PNG 都保住透明。不过最后垫在它后面的那层得是浅色,否则扫描器根本量不到对比。

二维码
颜色和尺寸

4 拿走

该留着的是 SVG。它是以指令表达的码,不是一堆像素,印多大都不发虚。这一点在这儿比在别的图片上更要紧,因为发虚的边缘正是扫描器分辨不了的东西。

以 Markdown 查看

不上传怎么生成二维码

  1. 先挑码的种类。二维码什么都装得下,也是手机摄像头默认要找的东西,所以除非有人另有要求,答案就是它。条形码装的是一串数字,具体要哪一种,由将来扫它的那一方说了算:商店要 EAN-13 或者 UPC-A,运输纸箱要 ITF-14,公司内部用的一般是 Code 128。
  2. 说清楚码里装什么。最常见的是一个链接,上面那几个表单则负责拼出手机认得的其他格式:一个能自动加入的 Wi-Fi、一张能提示保存的名片、一封邮件、一条短信、一个电话号码、一个地图位置。不管你选哪个,拼好的那串字符都会显示在页面上,因为二维码里装的从来就只有它。
  3. 决定它能挨多少损伤。四个等级放进去的纠错数据一档比一档多,而纠错越多,码就越大越密。屏幕上看 L 就够,普通纸张用 M,要被反复摸、印得很小、或者贴在晒得到太阳的橱窗上,用 H。菜单上那种每天要擦一遍的码,值得上 Q 或者 H。
  4. 定尺寸、留白和颜色。留白是码的一部分。规范要求四边各留四个模块的空白,把它裁掉,是印出来的码扫不出来最常见的单一原因。深色在浅色上,而且对比要真够:读取器量的是两者之差,所以白底浅灰不行,浅色在深底上更是有相当多的读取器直接不认。
  5. 拿你手上这部手机试一下。印一千份之前,先扫屏幕上这个。十秒钟的事,却能挡住一整类预览看不出来的毛病:Wi-Fi 密码里有个字符本该转义、链接漏了 https://、条码数字少了一位。
  6. 拿 SVG。它是以指令表达的码,不是一堆像素,所以印多大都不发虚,而发虚的边缘正是扫描器最分辨不了的东西。你要粘进去的地方要是不认 SVG,那就顺手也拿上 PNG,它按每个模块整数个像素画出来,同样没有糊掉的边。

说得更细的版本

怎么做一个到了别人手机上还扫得出来的二维码 纠错等级该选哪个,二维码周围那圈白为什么是码的一部分,印多大合适,还有免费生成器的“动态码”日后要你付出什么。

常见问题

我打进去的东西会被发到什么地方吗?

不会。二维码就是对一串字符做算术,而这套算术在你自己的浏览器里、你自己的机器上跑。这个工具没有任何联网功能,不取东西,也不发东西。页面的 Content-Security-Policy 把它可能联的地址全列了出来,没有一个是本站的。这一点在这儿比在别的页面更值钱,因为人们最常塞进二维码的,就是自家 Wi-Fi 的密码。

这些码会过期吗?会哪天突然失效吗?

不会,也不可能。你打进去什么,码里就装什么,扫出来永远是那串字符。会过期的是那种里面装着别人地址的码:所谓“动态”二维码,装的是通往生成方服务器的链接,再由那边跳到你这儿。于是他们能数走每一次扫描,能改目的地,也能在试用期结束那天把它关掉。这里没有任何东西经别人中转。

免费吗?能商用吗?

免费,没有账号,没有水印,生成多少个都不限,结果放到产品上、海报上、店面上都行。QR Code 是电装(Denso Wave)的注册商标,他们公开表示不会对使用这种码的人主张这项商标,规范以 ISO/IEC 18004 公开发布,任何人都可以自由实现,这个页面做的就是这件事。本站带广告,经费就是这么来的。

纠错等级该选哪个?

没有特别理由就选 M。L 生成的码最小,屏幕上完全够用;M 扛得住日常翻动;Q 和 H 留给那些要印得很小、要过塑、要贴橱窗、或者中间会被 logo 盖住一块的码。每往上一档,塞进去的校验数据就多一些,同样多的文字就需要一个更大的图形,从 L 换到 H,同一串字符的模块数大约要翻一倍。

一个二维码能装多少东西?

最大那一档是 ⁦177 × 177⁩ 个模块,最多装 7089 位数字、4296 个大写字母和数字,或者 2953 字节的其他内容,而这还是在最弱纠错下的数字,最强纠错大约只有三分之一。实际上卡住你的不是格式,是扫描器:过了几百个字符,模块就小到普通手机摄像头在一臂之外分辨不出来了。码一长,通常说明里面该换成一个短链接。

链接改成小写,码怎么反而变大了?

因为二维码有一种专门装大写字母和数字的模式,两个字符压进十一位;小写没有这种模式,一个字符要八位。同一个网址写成 HTTPS://EXAMPLE.COM/PAGE,可以比小写版本小三分之一。协议名和主机名本来就不区分大小写,喊成大写除了变小什么都不影响;主机后面那段路径可是区分的,别去动它。

它能扫码吗,还是只能生成?

这一页做不到,隔壁那页可以:识读工具接一张照片、一张截图或者你的摄像头,把里面那串字符还给你。这比画一个码大得多——在一张图里找出那个图形、把拍摄角度纠正回来、再把破损的地方修回来,这三件事这一页压根不用面对——所以它是一个单独的工具,而不是这里的一个按钮。它按这里一贯的规矩来:什么都不上传,摄像头的画面也一帧不留。

留白是干什么的,能不能少留点?

二维码周围那圈白不是装饰,是码的一部分。读取器靠它判断这个图形在哪儿结束,规范要求四边各留四个模块,条形码则要十个左右。这里你确实可以把它设成零,画面是清爽了,可相当多的扫描器从此就看不见它了,背景一花更是如此。地方不够,那就把码做小,别去动它的留白。

我该用哪种条形码?

扫它的那一方要哪种就用哪种。北美之外的零售条码是 EAN-13,北美是 UPC-A,两者都需要一个由 GS1 发给你的号码,因为那串数字标识的是你的公司,不只是这件商品。EAN-8 是给小包装用的短版本。ITF-14 印在运输纸箱上。Code 128 和 Code 39 除了数字还能装文字,而且完全不用注册,公司内部的东西用它们最合适:固定资产、货架、工单。

校验位是什么,工具为什么自己加了一位?

它是零售条码的最后一位,由前面几位算出来,好让扫描器分得清“读错了”和“读对了”。EAN-13 要你给十二位,第十三位它来算;UPC-A 要十一位,第十二位它来算。你打短的,这个页面替你补上;你打全的,它会核对你给的那一位,对不上就拒绝,而不是悄悄改掉。一位数字被悄悄“修正”,等于印出一张扫出来是别人商品的标签。

能在二维码中间放个 logo 吗?

小标志有时可行,但无法保证任何图像面积比例都安全。DENSO 所说 H 级约 30% 的恢复率以全部码字为分母,并非任意方块。保留定位和校正图形,使用 H 级,并用多部手机测试最终印刷品。DENSO 的纠错说明解释了这个比例。

为什么 SVG 比 PNG 好?

因为码是由边缘构成的,而 PNG 只有固定数量的像素来拼这些边缘。放大一张 PNG,每条边都发虚,而发虚的边正是扫描器最头疼的;给一台 1200 dpi 的打印机一张 512 像素的 PNG,等于让它自己编出那些差别来。SVG 是以指令表达的方块,所以印在名片上和印在广告牌上都一样锐利。这里的 PNG 按每个模块整数个像素画出来,那已经是 PNG 能做到的最好情况。

断网能用吗?

能。页面开一次之后断网,它照干不误。这也是证明“什么都没上传”最省事的办法。一个把你的文字送出去画码的工具,拔线那一刻就停了。