🛠️

Whiz Tools

Build • Create • Innovate

简单的二维码生成器:即时创建和下载二维码

使用这个简单的工具从任何文本或网址生成二维码。通过干净、简约的界面即时创建可扫描的二维码,并一键下载。

二维码生成器

复制
在上方输入文本或网址以生成二维码

在上方输入文本或网址以生成二维码。二维码将在您输入时自动更新。

📚

文档

QR 码生成器:即时创建 QR 码

QR 码简介

QR 码(快速响应码)彻底改变了我们在数字时代共享信息的方式。我们的免费 QR 码生成器允许您即时为 URL、文本、联系信息等创建 QR 码。这个简单、用户友好的工具生成可扫描的 QR 码,可以下载并在各种平台和材料中使用,架起了物理和数字世界之间的桥梁。

QR 码于 1994 年由日本汽车公司 Denso Wave 发明,用于在制造过程中跟踪车辆。如今,这种二维条形码已在营销、支付、信息共享和无数其他应用中变得无处不在。在 COVID-19 大流行期间,企业寻求无接触解决方案(如菜单、支付和信息共享),使其受欢迎程度激增。

我们的 QR 码生成器专注于简便和高效,允许任何人无需技术专长或复杂配置即可创建功能性 QR 码。

QR 码的工作原理

QR 码以黑色方块在白色背景上排列的信息模式存储信息。与只能水平存储信息的传统条形码不同,QR 码可以水平和垂直存储数据,从而能够容纳更多信息。

QR 码结构

标准 QR 码由几个关键组件组成:

  1. 查找模式:角落中的三个大方块帮助扫描设备定位 QR 码并确定其方向。
  2. 对齐模式:代码中的小方块帮助在从角度扫描时纠正失真。
  3. 定时模式:交替的黑白模块帮助确定代码中单元的坐标。
  4. 版本信息:标识所使用的 QR 码版本(版本 1-40,确定大小)。
  5. 格式信息:包含错误更正级别和掩码模式信息。
  6. 数据和错误更正键:实际编码的信息和错误更正代码。
  7. 安静区:QR 码周围的空白边距,对于正确扫描至关重要。
QR 码结构示意图 QR 码组件的详细插图,包括查找模式、对齐模式、定时模式和数据模块

查找模式 对齐模式 定时模式 数据模块

QR 码结构

编码过程

当您在我们的 QR 码生成器中输入文本或 URL 时,以下过程会发生:

  1. 输入数据被分析以确定最有效的编码模式(数字、字母数字、字节或汉字)。
  2. 数据根据所选编码模式转换为二进制字符串。
  3. 二进制数据被分解为代码字(大多数 QR 版本每个 8 位)。
  4. 使用 Reed-Solomon 错误更正生成错误更正代码字。
  5. 数据和错误更正代码字根据 QR 码规范进行排列。
  6. 生成的模式被放置在 QR 码矩阵中,应用掩码模式以确保最佳扫描。
  7. 最终的 QR 码作为 SVG 图像呈现,可以显示或下载。

错误更正级别

QR 码包括内置的错误更正功能,即使部分损坏或遮挡也能被读取。共有四个错误更正级别:

  • L 级(低):可恢复最多 7% 的数据损坏
  • M 级(中):可恢复最多 15% 的数据损坏
  • Q 级(四分之一):可恢复最多 25% 的数据损坏
  • H 级(高):可恢复最多 30% 的数据损坏

我们的生成器使用最佳错误更正级别,以平衡代码大小和可靠性。

QR 码计算和生成过程

数据容量计算

QR 码的数据容量取决于其版本(大小)和错误更正级别。计算 QR 码可以包含的最大位数的公式为:

总位数=数据代码字×8\text{总位数} = \text{数据代码字} \times 8

其中数据代码字由以下公式确定:

数据代码字=总代码字错误更正代码字\text{数据代码字} = \text{总代码字} - \text{错误更正代码字}

对于版本 1 的 QR 码,使用错误更正级别 L:

  • 总代码字:26
  • 错误更正代码字:7
  • 数据代码字:19
  • 总位数:19 × 8 = 152 位

字符容量计算

可以编码的字符数量取决于编码模式:

  • 数字模式总位数/10×3\lfloor \text{总位数} / 10 \times 3 \rfloor(每 10 位 3 位数字)
  • 字母数字模式总位数/11×2\lfloor \text{总位数} / 11 \times 2 \rfloor(每 11 位 2 个字符)
  • 字节模式总位数/8\lfloor \text{总位数} / 8 \rfloor(每 8 位 1 个字符)
  • 汉字模式总位数/13×1\lfloor \text{总位数} / 13 \times 1 \rfloor(每 13 位 1 个字符)

错误更正计算

QR 码使用 Reed-Solomon 错误更正代码来检测和纠正错误。可以纠正的错误数量为:

t=nk2t = \left\lfloor \frac{n-k}{2} \right\rfloor

其中:

  • tt 是可以纠正的错误数量
  • nn 是代码字的总数
  • kk 是数据代码字的数量

Reed-Solomon 错误更正过程可以用数学表示为:

C(x)=M(x)xnkC(x) = M(x) \cdot x^{n-k}

其中:

  • C(x)C(x) 是代码字多项式
  • M(x)M(x) 是消息多项式
  • nn 是符号的总数
  • kk 是消息符号的数量

边缘情况和限制

  • 数据溢出:如果输入数据超过所选 QR 码版本的容量,生成器必须增加版本或降低错误更正级别。
  • 字符集限制:某些字符可能需要字节模式编码,这会使用更多的每字符位数。
  • 错误更正权衡:更高的错误更正级别会减少数据容量,但会增加可靠性。
  • 版本限制:较小的 QR 码(较低版本)具有显著较小的容量,而较大的 QR 码则容量更大。

掩码模式选择

掩码模式应用于 QR 码,以确保黑白模块的最佳分布。通过评估 8 种可能的掩码模式(0-7)中的每一种的惩罚分数,选择惩罚分数最低的掩码。

惩罚分数根据以下四条规则计算:

  1. 行/列中相邻模块,所有相同颜色
  2. 相同颜色的模块块
  3. 与查找模式相似的模式
  4. 整个符号中深色模块的比例

如何使用我们的 QR 码生成器

使用我们的工具创建 QR 码非常简单,无需技术知识。请按照以下简单步骤操作:

  1. 输入您的内容:在输入字段中输入或粘贴您要编码的文本、URL 或信息。
1   <input type="text" id="qr-input" placeholder="输入 URL 或文本" value="https://example.com">
2   
  1. 生成 QR 码:QR 码会在您输入时自动更新,或者您可以单击生成按钮。
1   document.getElementById('generate-btn').addEventListener('click', function() {
2     const data = document.getElementById('qr-input').value;
3     generateQRCode(data, 'qr-output');
4   });
5   
6   function generateQRCode(data, elementId) {
7     // 清除先前的 QR 码
8     document.getElementById(elementId).innerHTML = '';
9     
10     // 生成新的 QR 码
11     new QRCode(document.getElementById(elementId), {
12       text: data,
13       width: 256,
14       height: 256,
15       colorDark: "#000000",
16       colorLight: "#ffffff",
17       correctLevel: QRCode.CorrectLevel.H
18     });
19   }
20   
  1. 下载您的 QR 码:将生成的 QR 码保存为图像文件。
1   document.getElementById('download-btn').addEventListener('click', function() {
2     const canvas = document.querySelector('#qr-output canvas');
3     if (canvas) {
4       const url = canvas.toDataURL('image/png');
5       const a = document.createElement('a');
6       a.download = 'qrcode.png';
7       a.href = url;
8       document.body.appendChild(a);
9       a.click();
10       document.body.removeChild(a);
11     }
12   });
13   
  1. 测试您的 QR 码:在分发之前,使用多个设备扫描 QR 码以确保其正常工作。

在您自己的项目中实现 QR 码

如果您想在自己的应用程序中实现 QR 码生成,以下是不同编程语言的示例:

HTML/JavaScript 实现

1<!DOCTYPE html>
2<html>
3<head>
4  <title>QR 码生成器</title>
5  <script src="https://cdn.jsdelivr.net/npm/qrcode@1.4.4/build/qrcode.min.js"></script>
6  <style>
7    body { font-family: Arial, sans-serif; max-width: 800px; margin: 0 auto; padding: 20px; }
8    .container { display: flex; flex-direction: column; align-items: center; }
9    input { width: 100%; padding: 10px; margin-bottom: 20px; }
10    button { padding: 10px 20px; background: #2563EB; color: white; border: none; cursor: pointer; }
11    #qrcode { margin-top: 20px; }
12  </style>
13</head>
14<body>
15  <div class="container">
16    <h1>QR 码生成器</h1>
17    <input type="text" id="text" placeholder="输入 URL 或文本" value="https://example.com">
18    <button onclick="generateQR()">生成 QR 码</button>
19    <div id="qrcode"></div>
20  </div>
21  
22  <script>
23    function generateQR() {
24      const text = document.getElementById('text').value;
25      document.getElementById('qrcode').innerHTML = '';
26      
27      QRCode.toCanvas(document.createElement('canvas'), text, function (error, canvas) {
28        if (error) console.error(error);
29        document.getElementById('qrcode').appendChild(canvas);
30      });
31    }
32  </script>
33</body>
34</html>
35

Python 实现

1# 使用 qrcode 库
2import qrcode
3from PIL import Image
4
5def generate_qr_code(data, filename="qrcode.png"):
6    qr = qrcode.QRCode(
7        version=1,
8        error_correction=qrcode.constants.ERROR_CORRECT_M,
9        box_size=10,
10        border=4,
11    )
12    qr.add_data(data)
13    qr.make(fit=True)
14    
15    img = qr.make_image(fill_color="black", back_color="white")
16    img.save(filename)
17    return filename
18
19# 示例用法
20url = "https://example.com"
21generate_qr_code(url, "example_qr.png")
22

Java 实现

1// 使用 ZXing 库
2import com.google.zxing.BarcodeFormat;
3import com.google.zxing.WriterException;
4import com.google.zxing.client.j2se.MatrixToImageWriter;
5import com.google.zxing.common.BitMatrix;
6import com.google.zxing.qrcode.QRCodeWriter;
7
8import java.io.IOException;
9import java.nio.file.FileSystems;
10import java.nio.file.Path;
11
12public class QRCodeGenerator {
13    
14    public static void generateQRCode(String data, String filePath, int width, int height) 
15            throws WriterException, IOException {
16        QRCodeWriter qrCodeWriter = new QRCodeWriter();
17        BitMatrix bitMatrix = qrCodeWriter.encode(data, BarcodeFormat.QR_CODE, width, height);
18        
19        Path path = FileSystems.getDefault().getPath(filePath);
20        MatrixToImageWriter.writeToPath(bitMatrix, "PNG", path);
21    }
22    
23    public static void main(String[] args) {
24        try {
25            generateQRCode("https://example.com", "qrcode.png", 350, 350);
26        } catch (WriterException | IOException e) {
27            System.out.println("生成 QR 码时出错: " + e.getMessage());
28        }
29    }
30}
31

PHP 实现

1<?php
2// 使用 PHP QR Code 库
3// 首先安装:composer require endroid/qr-code
4
5require 'vendor/autoload.php';
6
7use Endroid\QrCode\QrCode;
8use Endroid\QrCode\Writer\PngWriter;
9
10function generateQRCode($data, $filename = 'qrcode.png') {
11    $qrCode = new QrCode($data);
12    $qrCode->setSize(300);
13    $qrCode->setMargin(10);
14    
15    $writer = new PngWriter();
16    $result = $writer->write($qrCode);
17    
18    // 保存到文件
19    $result->saveToFile($filename);
20    
21    return $filename;
22}
23
24// 示例用法
25$url = 'https://example.com';
26$file = generateQRCode($url);
27echo "QR 码已保存到: " . $file;
28?>
29

C# 实现

1// 使用 ZXing.Net 库
2// 首先安装:Install-Package ZXing.Net
3
4using System;
5using System.Drawing;
6using System.Drawing.Imaging;
7using ZXing;
8using ZXing.QrCode;
9
10namespace QRCodeGeneratorApp
11{
12    class Program
13    {
14        static void Main(string[] args)
15        {
16            string data = "https://example.com";
17            string filePath = "qrcode.png";
18            
19            GenerateQRCode(data, filePath);
20            Console.WriteLine($"QR 码已保存到: {filePath}");
21        }
22        
23        static void GenerateQRCode(string data, string filePath)
24        {
25            var qrCodeWriter = new BarcodeWriter
26            {
27                Format = BarcodeFormat.QR_CODE,
28                Options = new QrCodeEncodingOptions
29                {
30                    Height = 300,
31                    Width = 300,
32                    Margin = 1
33                }
34            };
35            
36            using (var bitmap = qrCodeWriter.Write(data))
37            {
38                bitmap.Save(filePath, ImageFormat.Png);
39            }
40        }
41    }
42}
43

QR 码生成的最佳实践

确保您的 QR 码有效且用户友好:

设计考虑

  1. 保持高对比度:黑色和白色提供最佳的扫描可靠性,尽管某些颜色变化可以在保持高对比度的情况下工作。
  2. 适当大小:确保您的 QR 码足够大,以便从预期距离轻松扫描。
  3. 彻底测试:在不同设备和各种光照条件下扫描您的 QR 码。
  4. 包含行动号召:告诉用户扫描代码后会得到什么(“扫描查看菜单”,“扫描访问我们的网站”)。

内容优化

  1. 使用 URL 缩短器:对于较长的网页地址,使用 URL 缩短器以减少 QR 码复杂性。
  2. 优先考虑移动优化:确保目标页面或内容在移动设备上友好。
  3. 考虑加载时间:链接到快速加载的内容。
  4. 更新内容,而不是代码:如果使用您控制的 URL,您可以在不更改 QR 码的情况下更新目标内容。

放置策略

  1. 选择可访问的位置:将 QR 码放置在易于扫描的地方。
  2. 避免反射表面:眩光可能会干扰扫描。
  3. 考虑环境因素:确保代码在户外环境中受到保护以免损坏。
  4. 提供足够的光线:QR 码需要足够的光线才能正确扫描。

QR 码的限制和注意事项

虽然 QR 码是多功能的,但了解其限制有助于创建更有效的实现:

数据容量

QR 码可以存储的数据量取决于:

  • QR 码的版本(大小)
  • 编码的数据类型
  • 使用的错误更正级别

大致最大容量:

  • 数字数据:最多 7,089 个字符
  • 字母数字数据:最多 4,296 个字符
  • 二进制数据:最多 2,953 字节
  • 汉字/假名符号:最多 1,817 个字符

我们的生成器会根据您的输入自动优化这些因素。

扫描可靠性因素

多个因素会影响 QR 码的扫描可靠性:

  1. 大小和距离:较大的 QR 码可以从更远的距离扫描。
  2. 代码复杂性:包含更多数据的代码具有更小的模块,扫描更困难。
  3. 表面类型:曲面或不平坦的表面可能会扭曲 QR 码。
  4. 光照条件:极端光照(过亮或过暗)可能会影响扫描。
  5. 扫描仪质量:不同设备具有不同的相机质量和 QR 码读取能力。

可访问性考虑

在实施 QR 码时,考虑所有用户的可访问性:

  1. 提供替代方案:始终提供非 QR 码选项以访问相同信息。
  2. 清晰的说明:包括文本解释 QR 码包含的内容和如何使用。
  3. 适当的大小:确保 QR 码足够大,以便视觉障碍用户或老旧设备可以轻松扫描。
  4. 逻辑放置:将 QR 码放置在所有用户都能轻松到达的地方。

常见问题解答

什么是 QR 码?

QR(快速响应)码是一种以黑色方块在白色背景上存储信息的二维条形码。当用智能手机相机或 QR 读取器应用扫描时,它可以快速提供对编码信息的访问,该信息可以是网站 URL、纯文本、联系信息或其他数据类型。

QR 码能存储多少数据?

QR 码可以存储不同数量的数据,具体取决于版本和错误更正级别。在最大容量下,QR 码可以存储最多 7,089 个数字字符、4,296 个字母数字字符、2,953 字节的二进制数据或 1,817 个汉字字符。

QR 码安全吗?

基本的 QR 码本身并不安全,因为它们只是存储和显示信息。用户在扫描未知 QR 码时应保持警惕,因为它们可能链接到恶意网站。对于实施 QR 码的企业,建议使用受信任的生成器并将用户引导到安全网站(https)。

我可以自定义我的 QR 码外观吗?

虽然我们的简单生成器专注于创建标准、高度可扫描的 QR 码,但可以使用专业工具自定义 QR 码的颜色和徽标。然而,定制应谨慎进行,以保持可扫描性,确保足够的对比度,并且不遮挡关键模式。

QR 码会过期吗?

QR 码本身不会过期——它们只是编码数据的可视表示。然而,如果 QR 码链接到的内容发生变化(例如,网站下线或临时促销),则目标可能会变得不可用。静态 QR 码仅包含文本信息时,扫描时始终会显示相同的信息。

我可以跟踪我的 QR 码被扫描多少次吗?

我们的简单生成器创建静态 QR 码,没有内置分析功能。要进行扫描跟踪,您需要使用提供分析的动态 QR 码服务,或者链接到带有跟踪参数的 URL,以便您的网站分析可以监控。

QR 码与条形码有什么区别?

传统条形码以一维(水平)存储数据,通常包含有限的数字数据,如产品 ID。QR 码以二维(水平和垂直)存储信息,使其能够容纳更多数据和不同类型的信息,包括 URL、文本和联系信息。

如果 QR 码部分损坏,可以扫描吗?

是的,QR 码包括错误更正功能,即使部分损坏或遮挡也能被扫描。可纠正的损坏程度取决于生成代码时使用的错误更正级别,较高的级别允许更多的损坏抵抗,但会降低数据容量。

我需要特殊应用来扫描 QR 码吗?

大多数现代智能手机可以通过内置相机应用直接扫描 QR 码。只需打开相机并对准 QR 码即可。对于旧设备,您可能需要从设备的应用商店下载专用的 QR 码扫描应用。

我可以一次生成多个 QR 码吗?

我们的简单生成器设计为一次生成一个 QR 码。对于批量生成,您可能需要使用专门的软件或服务。

参考文献

  1. Denso Wave(QR 码的发明者)。 "QR 码的历史。" https://www.qrcode.com/en/history/

  2. 国际标准化组织。 "ISO/IEC 18004:2015 - 信息技术 — 自动识别和数据捕获技术 — QR 码条形码符号规范。" https://www.iso.org/standard/62021.html

  3. Tiwari, S. (2016)。 "QR 码技术简介。" 国际信息技术会议,39-44。 DOI: 10.1109/ICIT.2016.38

  4. Wave, D. (2020)。 "QR 码基础知识。" QR Code.com。 https://www.qrcode.com/en/about/

  5. Winter, M. (2011)。 "扫描我:每个人的 QR 码魔法世界指南。" Westsong Publishing。

立即开始创建您的 QR 码

我们的 QR 码生成器使您可以在几秒钟内创建可扫描的 QR 码。无论您是链接到网站、共享联系信息,还是提供快速访问重要细节,我们的工具都可以帮助您轻松架起物理和数字世界之间的桥梁。

现在尝试我们的 QR 码生成器——无需注册,无需配置复杂设置,只需在您的指尖即时创建 QR 码。