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
alaberga regué el café.

BA:STFW&RTFM

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