2017-11-07 9 views
0

qrcodeパッケージを使用してカスタムQRコードを生成しようとしていますが、有効な入力で失敗したような問題が発生しました。私はこれがパッケージのバグか、私が慣れていないQRコードの予想される動作かどうか疑問に思っています。有効な入力のQRコード生成に失敗しました

this siteによれば、ミディアムエラー修正を備えたバージョン1のQRコードは、20文字までの英数字値を保持できます。 myStrの下には19文字の長さの単純な英数字の文字列であり、それは

qrcode.exceptions.DataOverflowError: Code length overflow. Data size (131) > size available (128)

しかし、私は0000000000A0000A000000000000000000A000からmyStrを変更した場合、出力に失敗し、文字列はまだ英数字で、まだ同じ長さが、それは通過する。

import qrcode 
qr = qrcode.QRCode(
    version=1, 
    error_correction=qrcode.constants.ERROR_CORRECT_M, 
) 

myStr = '0000000000A0000A000' 
print(len(myStr)) 
qr.add_data(myStr) 
qr.make(fit=False) 
img = qr.make_image() 

のWindows、Pythonの2.7、QRコードのバージョン5.3、枕

答えて

1

エラー

qrcode.exceptions.DataOverflowError: Code length overflow. Data size (131) > size available (128) 

QRコード、ないあなたが作成したバフを指摘しています。 QRコード/ util.pyで :

print 'len(buffer):', len(buffer) 
print 'buffer:', buffer 
if len(buffer) > bit_limit: 
    raise exceptions.DataOverflowError(
     "Code length overflow. Data size (%s) > size available (%s)" % 
     (len(buffer), bit_limit)) 

出力について0000000000A0000A000:

bit_limit: 128 
len(buffer): 131 
buffer: 16.40.0.0.0.0.64.20.17.1.0.0.32.33.194.0.0 

出力について000000000000000A000:

bit_limit: 128 
len(buffer): 99 
buffer: 16.60.0.0.0.0.0.0.32.33.194.0.0 

あなたは大きなbit_limitを持って上位のバージョンを使用することができます。

qr = qrcode.QRCode(
    version=2,  # use upper level version 
    error_correction=qrcode.constants.ERROR_CORRECT_M, 
) 
> bit_limit: 224 
0

これはqrcodeのバグのようです。私は異なるOS、pythonバージョン、およびqrバージョンでこの問題を繰り返すことができました。これは英数字データに特に影響するようです。私はこれをqrcode githubページの問題として報告しました。

これに遭遇する他の人のために、optimizeパラメータをadd_dataに設定して0に設定すると、それが成功することが判明しました。すなわち

qr.add_data(myStr, optimize=0) 

私は、特定の長さの何千ものランダムな英数字の文字列を生成し、それらのすべてのQRコードを生成することによって上記をテストしました。私はさまざまなQRバージョンとエラー修正レベルでテストしましたが、私は何の失敗もありませんでした。

関連する問題