Bueno ando con un programita para generar ean 13 de mi tienda online lo estoy haciendo con game maker
el dígito de control se me resiste y esta el código en delphi alguien podría hacerme el favor de adaptarlo
gracias de antemano
// Cálculo del dígito de control EAN
function cc_CalcDV_Ean(Ean: String): Integer;
{ Calcula y devuelve el dígito verificador de una cadena de código EAN13 o EAN8
Devcuelve -1 en caso de ser incorrecto. }
var
SP, SI, I, L:Integer;
Impar: Boolean;
begin
L:= Length(Ean);
if (L=8) or (L=13) then
begin
SI:= 0;
SP:= 0;
I:= L-1;
Impar:= Odd(L);
repeat // Bucle para sumar los valores discriminando posiciones pares e impares
if Impar then SI:= SI + StrToInt(Ean) else SP:= SP + StrToInt(Ean);
Impar:= not Impar;
I:= I - 1;
until I =0;
if Impar then SI:= SI*3 else SP:= SP*3; // Multiplica por tres según la longitud del código
Result:= 10-(SI+SP) mod 10; // Calcula el dígito de verificación
end else Result:= -1;
end;
No sé un pepino de Delphi, pero si sabes lo que quieres hacer (o al menos lo que ese código hace), ¿Por qué no lo haces directamente en GML en vez de traducirlo?
Sólo por si acaso, quizás deberías explicar qué significa ese código para quienes no saben delphi pero quizás sepan hacer lo que quieres en GML
Wikipedia explica muy bien el algoritmo, y con esa información hice este script:
[gml]
///ean( cadena )
var I, L, S;
L = string_length( argument0 ); //longitudd
if( L<>7 and L<>12 ) return -1; //codigo no valido
S = 0;
for( I=L; I>0; I-=2 ) //suma impar
S += real(string_char_at( argument0, I ));
S *= 3;
for( I=L-1; I>0; I-=2 ) //suma par
S += real(string_char_at( argument0, I ));
return (10 - (S mod 10)) mod 10; //resultado
[/gml]
La entrada debe ser una cadena de 7 o 12 carateres, y el resultado es un entero.
Gracias Clamud no sabia lo del impar y me pillo ayer a ultima hora cansado
enhorabuena parece que tu lo has sacado sin problemas