2017-11-07 7 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() 

윈도우, 파이썬 2.7하시면 자동 버전 5.3, 베개

답변

1

오류

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

하시면 자동 아니라 당신에 의해 생성 된 광을 지적한다. 하시면 자동/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_data0으로 설정하면 통과하는 것으로 나타났습니다. 즉

qr.add_data(myStr, optimize=0) 

나는 특정 길이의 임의의 숫자 문자열의 수천을 생성하고 그들 모두를 위해 QR 코드를 생성하여 위의 테스트했습니다. 나는 다른 QR 버전과 오류 수정 레벨을 통해 테스트 해본 결과 어떤 실패도 없었습니다.