Advertisement
AntonioVillanueva

EAN13

Apr 10th, 2020
458
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.02 KB | None | 0 0
  1. #!/usr/bin/python
  2. # -*- coding: latin-1 -*-
  3. """ Codificador EAN13 Antonio Villanueva Segura
  4. https://barcode-coder.com/en/ean-13-specification-102.html
  5. """
  6. import sys
  7. import math
  8.        
  9. def checksum (numero):
  10.     """ calcula el checksum, numero  final para ean13"""
  11.     odd,even=0,0
  12.    
  13.     for index in range(len(numero)-1,-1,-1):
  14.         if int(index)%2:#es par
  15.             odd+=int (numero[index])
  16.         else:#es impar
  17.             even+=int (numero[index])
  18.                
  19.     return (10-(odd*3+even)%10)%10
  20.          
  21. def tabla(numero,tabla):   
  22.     """TABLA0 se utiliza con el primer numero , nos dara la codificacion
  23.       para la primera tabla empleando ,TABLA2-3
  24.        TABLA3 se utiliza en la  ultima parte """
  25.     clave={#  TABLA0   TABLA 1   TABLA 2   TABLA3
  26.         '0':('000000','0001101','0100111','1110010'),
  27.         '1':('001011','0011001','0110011','1100110'),
  28.         '2':('001101','0010011','0011011','1101100'),
  29.         '3':('001110','0111101','0100001','1000010'),
  30.         '4':('010011','0100011','0011101','1011100'),
  31.         '5':('011001','0110001','0111001','1001110'),
  32.         '6':('011100','0101111','0000101','1010000'),
  33.         '7':('010101','0111011','0010001','1000100'),
  34.         '8':('010110','0110111','0001001','1001000'),
  35.         '9':('011010','0001011','0010111','1110100')
  36.     }
  37.     return clave.get(numero)[int(tabla)]
  38.    
  39. def ean13(numero,space=''):
  40.     """La primera parte se codifica segun la clave anterior
  41.     Sumario de la secuencua EAN 13
  42.    start : 101
  43.    parte #1
  44.    centro : 01010
  45.    parte #2
  46.    stop : 101
  47.     """
  48.     codigo="101"+space#START
  49.    
  50.     for n, i in zip(range(1,7), range(7)):#1era. PARTE1
  51.         codigo +=tabla( str(numero[n]) ,  int(tabla( numero[0] , 0)[i]) +1 ) +space
  52.  
  53.     codigo+='01010'+space #PARTE INTERMEDIA
  54.  
  55.     for n, i in zip(range(7,len(numero)), range(7)):#2a. PARTE2
  56.         codigo +=tabla( str(numero[n]) , 3 ) +space
  57.        
  58.     codigo+='101'+space#STOP           
  59.  
  60.     return codigo
  61.    
  62. #numero a codificar segun EAN13
  63. numero='210987654321'
  64.  
  65. #genera el checksum
  66. numero+=str (checksum(numero))
  67.  
  68. print ("el numero es "+numero)
  69.  
  70. #genera EAN13 de este numero con checksum incluido
  71. print (ean13(numero,' '))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement