-1

我需要一个二维码库来只编码数值。只有数字值的 QR 码最多可以存储 7089 个字符,字母数字 - 4296。据我搜索,我可以找到能够仅编码字母数字或二进制值的库。除了一个 - BarcodeLib:http ://www.barcodelib.com/这真的很昂贵。

所以我需要免费的库,它只能编码数字数据并存储多达 7089 位数字。最有用的是 java 库,但也欢迎使用 python 或 .net 库。

4

1 回答 1

1

据我所知,QR Code 库起源于日本,是 C++ 的,在 Github 中寻找 Kuapay IOS 源代码的副本......包中嵌入的是一个包含 6 个源代码的 QRDraw 文件夹,

如果您查看标头 (QR_Encode.h),您感兴趣且最终以某种方式调用的那个是 QR_Encode,您可以看到以下内容:

===============
// åÎÇËí˘ê≥ÉåÉxÉã
   #define QR_LEVEL_L   0
   #define QR_LEVEL_M   1
   #define QR_LEVEL_Q   2
   #define QR_LEVEL_H   3

 // ÉfÅ[É^ÉÇÅ[Éh
    #define QR_MODE_NUMERAL  0
    #define QR_MODE_ALPHABET    1
    #define QR_MODE_8BIT     2
    #define QR_MODE_KANJI    3

// ÉoÅ[ÉWÉáÉì(å^î‘)ÉOÉãÅ[Év
  #define QR_VRESION_S  0 // 1 Å` 9
  #define QR_VRESION_M  1 // 10 Å` 26
  #define QR_VRESION_L  2 // 27 Å` 40

  #define MAX_ALLCODEWORD    3706 
      // ëçÉRÅ[ÉhÉèÅ[Éhêîç≈ëÂíl
  #define MAX_DATACODEWORD 2956 
     // ÉfÅ[É^ÉRÅ[ÉhÉèÅ[Éhç≈ëÂíl(ÉoÅ[ÉWÉáÉì40-L)
  #define MAX_CODEBLOCK   153 
     //  ÉuÉçÉbÉNÉfÅ[É^ÉRÅ[ÉhÉèÅ[Éhêîç≈ëÂíl(ÇqÇrÉRÅ[ÉhÉèÅ[ÉhÇä‹Çfi)
  #define MAX_MODULESIZE      177 
      // àÍï”ÉÇÉWÉÖÅ[Éãêîç≈ëÂíl

  #define QR_MARGIN 4

注释是日文的,所以根据我在源代码中的理解,需要一段时间才能理解

您通过以下命令调用编码过程:

CQR_Encode encoder;
encoder.EncodeData(1, 0, true, -1, str);

(1实际上是指QR级别(Reed Solomon纠错级别),在这种情况下M(RS纠错)0是QR版本S(小尺寸?)true是自动扩展的布尔值,-1是一个不起眼的参数称为 masking_no ,我仍然没有弄清楚它如何适合所有这些,而 str 是您要创建到 QR 码中的字符串。

从源代码中,它实际上评估字符串以检查它是数字、字母(全部大写)、汉字还是 8 位(混合大写),然后决定最大长度和编码/压缩方法。

因此,您的问题的答案是 - 如果这是作为 SDK 其余部分的基础的实际日语代码,那么只需确保您传递的字符串是真正的数字,它会弄清楚并允许传递更长的字符串。您可能想要使用版本 2 (L),尽管不建议您将 EC 级别降低到 L (0) 以减少冗余并增加最大字符数(ps 您引用的数字需要 EC 的 L.

我希望这有帮助

于 2013-01-29T10:05:13.130 回答