# codebarre.py

Created by nicolas-patrois

Created on August 29, 2019

1.11 KB

codebarre(“5011386029399”) affiche le code à barres EAN13 correspondant.

Attention, un code à barres erroné est refusé.

```from kandinsky import set_pixel,draw_string

def codebarre(ch="5011386029399"):
s=0
for i,e in enumerate(ch):
s+=int(e)*(1+2*(i%2))
s%=10
if s!=0:
raise ValueError("Code errone")

codes={"L":["0001101","0011001","0010011","0111101","0100011",
"0110001","0101111","0111011","0110111","0001011"]}
codes["R"]=["".join({"0":"1","1":"0"}[c] for c in l) for l in codes["L"]]
codes["G"]=["".join(l[-i-1] for i in range(7)) for l in codes["R"]]
choix=["LLLLLL","LLGLGG","LLGGLG","LLGGGL","LGLLGG",
"LGGLLG","LGGGLL","LGLGLG","LGLGGL","LGGLGL"]

barres="101"
gauche=choix[int(ch[0])]
for i in range(1,7):
barres+=codes[gauche[i-1]][int(ch[i])]
barres+="01010"
for i in range(7,13):
barres+=codes["R"][int(ch[i])]
barres+="101"

i=53
for j,e in enumerate(ch):
draw_string(e,i,162)
if j in {0,6}:
i+=21
else:
i+=14
for i,e in enumerate(barres):
if e=="1":
if i in {0,2,46,48,92,94}:
l=111
else:
l=100
for j in range(l):
set_pixel(65+2*i,j+60,(0,0,0))
set_pixel(66+2*i,j+60,(0,0,0))```