压缩基于Guid的字符串以写入QR码

时间:2013-06-27 15:39:11

标签: javascript cordova compression guid qr-code

我正在用html5 / javascript开发一个phonegap应用程序。我有一个大约1000个字符的字符串,包含以下格式的guid

1 = 0a0a8907-40b9-4e81-8c4d-d01af26efb78; 2 = cd4713339; 3 = Cjdnd; 4 = 19120581-21e5-42b9-b85f-3b8c5b1206d9; 5 = hdhsfsdfsd; 6 = 30a21580-48f3-40e8-87a3-fa6e39e6412f ; ...............

我必须将此特定字符串写入QR code。是否有任何工作技术来压缩此字符串并存储在QR码中。由该字符串生成的QR太复杂,并且不容易被移动电话的QR扫描仪读取。请建议将字符串大小减小到大约200-250字符的方法,这很容易阅读。

感谢任何帮助。

4 个答案:

答案 0 :(得分:2)

在您的问题中,您有以下示例数据:

1=0a0a8907-40b9-4e81-8c4d-d01af26efb78;2=cd4713339;3=Cjdnd;
4=19120581-21e5-42b9-b85f-3b8c5b1206d9;5=hdhsfsdfsd;6=30a21
580-48f3-40e8-87a3-fa6e39e6412f; ..............

1,4和4 6看起来像here所述的版本4 UUID。我怀疑2,3和5也可能实际上是UUIDs?!

UUID的二进制表示是128位长,只需读取UUID的十六进制数字并转换为二进制,它们就可以非常简单地转换为此表示形式。这为每个UUID提供了16个字节。

然而 - 由于UUID是版本4,它们基于随机数据,实际上反对进一步压缩(从代表UUID版本的几个位开始)。除了摆脱计数器(1=2=)和seperater:;之外,似乎没有进一步的压缩。

答案 1 :(得分:0)

QR码根据所使用的字符范围使用不同的字符集对数据进行编码。 IOW,如果你只使用ascii数字,它将使用不使用每位8位的编码。请参阅有关QR码的维基百科页面。

由于示例中的字符(例如小写字母),您将使用二进制编码,这对您的实际信息内容来说太过分了。

假设您可以控制解码器,您可以使用任何压缩库来获取ascii数据并在编码之前对其进行压缩,对二进制结果进行编码/解码,然后在解码器中对其进行解压缩。有一个尝试从压缩中获得最大收益的技术世界。您也可以从非ascii编码和elminate redudant信息开始,例如#= parts。

不能说,这会给你多少钱。

答案 2 :(得分:0)

如果您已经有权访问数据库,是否可以创建一个表来支持这个?如果是,请归档该值并使用QR的ID。

1)简单模式:ID = bigint with Identity(1000,1)并设置为主键,Value = NVARCHAR(MAX)。是的,这有点矫枉过正,所以要修改一下。

2)创建一个函数,将您的字符串值添加到表中,并将ID作为QR码的字符串返回。

3)创建另一个函数,在传递有效的ID号时返回字符串值。

很长一段时间内低于200个字符的限制。

答案 3 :(得分:0)

您不需要整个guid;这样可以消除2 ^ 128条记录中的一条记录(足以解决地球上每一位数字信息的许多遍)。

您需要删除多少条记录?大概少于40亿吧?那是2 ^ 32,因此只需使用GUID的前1/4,您的1000个字符就等于250。