Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Checksum en fbarcode (componente del ftp de clubdelphi) (https://www.clubdelphi.com/foros/showthread.php?t=74447)

Fossy 21-06-2011 04:38:40

Checksum en fbarcode (componente del ftp de clubdelphi)
 
Hola amigos:

He descargado el componente fbarcode del ftp de clubdelphi y todo perfecto, pero el problema que tengo es que a la hora de mandarle un valor a la propiedad Text para que genere un código de barras, si el checksum está activado lo genera pero no lo muestra pese a que tengo activado también que muestre el código en formato texto.

¿Cuál es el problema?, pues que yo almaceno en la tabla el Nº que le he mandado, por ejemplo A0000001 (Code39), y luego resulta que al leerlo con el lector el código es A0000001B, porque el checksum es "B", y si luego tengo que hacer una búsqueda exacta o filtrado de la tabla para localizarlo pues evidentemente no puedo.

El checksum debo tenerlo activado porque trabajar con Code39, como se decodifica dígito a dígito pueden aparecer errores, y el Checksum es la forma de curarse en salud.

He mirado el componente bien y no tengo forma de que me de el Checksum, o es que no lo he encontrado..., ¿hay alguna forma de saberlo?. Al saberlo almacenaría el código completo (control incluído) en la tabla y ya no tendría problemas, además de que ya me encargaría yo de imprimirlo todo en modo texto debajo del código de barras por si el usuario tiene que prescindir del escáner e introducirlo a mano.

Estoy usando Code39 y Ean13.

Es urgente amigos, esta modificación debo tenerla lista hoy.

Gracias y saludos.

duilioisola 21-06-2011 08:48:04

Creo que el valor del checksum siempre se pone como último caracter.
Cuando obtienes el código del lector de código de barras, podrías quitarle el último caracter y buscarlo.

También puedes crear tu el valor del checksum y guardarlo en la tabla de códigos de barra.
El componente tiene una unit para calcular esto.
Código Delphi [-]
unit bcchksum

...

function CheckSumModulo10(const data:string):string;
  var i,fak,sum : Integer;
begin
  sum := 0;
  fak := Length(data);
  for i:=1 to Length(data) do
  begin
    if (fak mod 2) = 0 then
      sum := sum + (StrToInt(data[i])*1)
    else
      sum := sum + (StrToInt(data[i])*3);
    dec(fak);
  end;
  if (sum mod 10) = 0 then
    result := data+'0'
  else
    result := data+IntToStr(10-(sum mod 10));
end;

Fossy 21-06-2011 23:59:37

Gracias por la respuesta.

Esa función devuelve el checksum de Ean8 y Ean13, pero no es capaz de calcular el checksum de Code39 porque todo el cálculo lo hace con números, y Code39 puede llevar letras (en mi caso los códigos comienzan por A o D, que simboliza Artículo o Descuento).

Pese a que en la propiedad CheckSumMethod está activado csmModulo10, no sé dónde ni como hace el cálculo para Code39, pero tras pasarlo por el lector el checksum suele ser una letra mayúscula, luego entonces no me encaja que use esa función.

Voy a echar un vistazo al código del componente, a ver si veo algo.

Gracias y saludos.


La franja horaria es GMT +2. Ahora son las 16:23:44.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi