Codigo de barras

Marcelo
25 de Enero del 2005
Hola gente!!

Estoy con un problema un tanto grave (para mis conocimientos), el tema es que estoy haciendo un sistema para un comercio de calzados con tpv, el sistema debe trabajar con lector de codigo de barras, hasta ahi no seria problema, el mismo aparece cuando tengo que generar el codigo de barra para los articulos, la forma de uso la hacemos asi:
ej: 1790036001035 donde
1 es el rubro o depto (calzado dama, hombre, etc)
79 se usa para identificar el proveedor (00 a 99)
0036 se usa para identificar el articulo (0000 a 9999)
para cada proveedor
001 se usa para el color (001 rojo, 002 azul, etc)
035 se usa para el nro del calzado, en este caso seria
el nro 35.
El problema es que para la norma con la que la tengo que usar (EAN 13) el codigo 1790036001035 no es valido, yo pense que el numero podia ser cualquiera y que a partir de ahi se generaban las barras, osea segun los numeros eran las barras.
No se si me explique bien, creo que me hice un bolonqui...
En fin, cualquie idea, ayuda, comentario y/o sugerencia, sera mas que bien venida y muy agradecida. Saludos para todos.

l_island
25 de Enero del 2005
El problema es que has cometido un error muy comun con referencia el EAN13. Debes saber que el caracter 13 del código es un valor calculado, que responde a la palicación de un algoritmo sobre los otros 12 dígitos. aquí te dejo una función que calcula el digito número 13:

Function BuildBarcode(MiCode As String) As String
Dim Add1 As Long, Add2 As Long, Res As Integer
Dim n As Integer

MiCode = Mid(MiCode, 1, 13) & String(13 - Len(Mid(MiCode, 1, 13)), "0")
Add1 = 0
For n = Len(MiCode) - 1 To 2 Step -2
Add1 = Add1 + val(Mid(MiCode, i, 1))
Next
Add1 = Add1 * 3

Add2 = 0
For n = Len(MiCode) - 2 To 1 Step -2
Add2 = Add2 + val(Mid(MiCode, i, 1))
Next

Add2 = Add2 + Add1

If (Add2 Mod 10) > 0 Then
Res = (CInt(Add2 10) + 1) * 10
Else
Res = Add2
End If
Res = Res - Add2
'insertamos el digito de control
Mid(MiCode, Len(MiCode), 1) = CStr(Res)
BuildBarcode= MiCode
End Function

Saludos!!
l_island