- id: ean_128
- module name: ean_128
- function name: convierteA128
<dtml-let codigo="'%06d-%05d'">
<div class="nomostrar" id="codigo_barra"><dtml-var expr="ean_128((codigo)%(taller, credencial), False)"></div>
<div class="nomostrar" id="taller_credencial"><dtml-var expr="(codigo)%(taller, credencial)"></div>
</dtml-let>
El <dtml-let codigo="'%06d-%05d'">permite dar formato: si le mando taller 15 y credencial 148 me regresa 000015-00148 y convierto la cadena a codificacion 128.
Se debe tener instalado el tipo de letra Code128bWin. Tambien es importante tener en codificacion de salida en zope.conf, opcion default-zpublisher-encoding como iso-8859-1
script ean_128.py [RS] [MU]:
validoB=' !"#$%&\'()*+,-./:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~'
validoC='0123456789'
startB = 154
startC = 155
cambioC= 149
cambioB= 150
stop = 156
def convierteA128(s, TipoC=True):
"""Convierte una cadena a su representacion ASCII de codigo de barra"""
lista = formaLista(s, TipoC)
verificador= digito_verificador(lista)
lista.append(verificador)
lista.append(chr(stop))
cadena=""
for c in lista:
cadena=cadena + c
return cadena
def digito_verificador(lista):
"""Saca el digito verificador de la lista de Codigo de Barra Codificada"""
import string
l2=[]
i=suma=l=0
j=len(lista)
if ord(lista[0])==startB:
suma=startB-50
elif ord(lista[0])==startC:
suma=startC-50
for i in range(1,j):
if len(lista[i])==2:
l=string.atoi(lista[i])
elif ord(lista[i])==cambioC:
l=cambioC-50
elif ord(lista[i])==cambioB:
l=cambioB-50
else:
l=ord(lista[i])-32
l=l*i
suma=suma+l
i,residuo= divmod(suma,103)
return regresa(residuo)
def formaLista(s,TipoC):
"""Recorre la cadena para formar una lista con el Codigo de Barra Codificado"""
l=[]
esC=False
cambio=False
c=s[0]
c2=' '
if c in validoB:
l.append(chr(startB))
else:
c=s[1]
if c in validoB or TipoC==False:
l.append(chr(startB))
else:
l.append(chr(startC))
cambio=True
for c in s:
if (c in validoB or TipoC==False):
esC=False
if cambio==True:
l.append(chr(cambioC))
cambio=False
if c2<>' ':
l.append(c2)
c2=' '
l.append(c)
elif (c in validoC):
if (esC==False):
c2=c
esC=True
else:
if c2 <> ' ':
if cambio==False:
cambio=True
l.append(chr(cambioB))
num=c2 + c
c2=' '
l.append(num)
else:
c2=c
if c2<>' ':
if cambio==True:
l.append(chr(cambioC))
l.append(c2)
return l
def regresa(i):
"""Convierte el digito verificador a su representacion ASCII"""
if i==0:
return chr(128)
if i >= 95:
return chr(i+50)
elif i>0 and i<95: br=""> return chr(i+32)95:>
No hay comentarios:
Publicar un comentario