Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Letra DNI,Nº AÑOS, DIGITO CONTROL CUENTA , D.CONTROL EAN 13

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Tips & Tricks
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Letra DNI,Nº AÑOS, DIGITO CONTROL CUENTA , D.CONTROL EAN 13 Responder citando

HOLA:

Pequeñas utilidades de esas que siempre se hechan de menos.

int Anos (TDateTime FechaNacimiento)
{
Word iTemp,iTemp2,Nada;
TDate Fecha;
int result;


DecodeDate(Now(),iTemp,Nada,Nada);
DecodeDate(FechaNacimiento,iTemp2,Nada,Nada);

if (FormatDateTime('mmdd',Now()) < FormatDateTime('mmdd',FechaNacimiento) )
result = iTemp-iTemp2-1;
else
result = iTemp-iTemp2;
return result;
}
//---------------------------------------------------------------------------

char LetraDNI (int DNI)
{
return "TRWAGMYFPDXBNJZSQVHLCKEO"[DNI%23];
}
//---------------------------------------------------------------------------

int CalcularDC (AnsiString entidad,AnsiString oficina,AnsiString cuenta)
{
int pesos[] = {6,3,7,9,10,5,8,4,2,1};
AnsiString banco = entidad + oficina;
int resultado,temp = 0;

for (int n = 0; n < 7; n++)
temp += banco.SubString(8 - n,1).ToInt() * pesos[n];
resultado = 11 - temp % 11;
if (resultado > 9)
resultado = 1 - resultado % 10;
temp = 0;
for (int n = 0; n < 9; n++)
temp = temp + cuenta.SubString(10 - n,1).ToInt() * pesos[n];
temp = 11 - temp % 11;
if (temp > 9)
temp = 1 - temp % 10;
resultado = resultado * 10 + temp;
return resultado;
}

//---------------------------------------------------------------------------


int DGC_Barras_EAN13(AnsiString Bar)
{
int par=0,impar= 0;
for (int i = 0; i< 12; i ++)
{
int c = (int )Bar.c_str()[i] - 48;
if ( (c % 2) == 0) // es par
par += c;
else
impar +=c;

}
//decena superior
int num = (par * 3) + impar;

for (int i = num ; i < num + 10; i ++)
if ( i % 10 == 0)
{
num = i - num;
break;
}
return num;
}

//---------------------------------------------------------------------------

No estan del todo probadas

By.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

El de los dígitos del banco no está bien. Falta recorrer en ambos bucles la última posición (primera de la cifra, porque se recorre de derecha a izquierda). Queda así:
Código:
int pesos[] = {6,3,7,9,10,5,8,4,2,1};
AnsiString banco = "21053055";
int resultado,temp = 0;

for (int n = 0; n < 8; n++)
     temp += banco.SubString(8 - n,1).ToInt() * pesos[n];
resultado = 11 - temp % 11;
if (resultado > 9)
     resultado = 1 - resultado % 10;
     
temp = 0;
AnsiString cuenta = "0140000119";
for (int n = 0; n < 10; n++)
     temp = temp + cuenta.SubString(10 - n,1).ToInt() * pesos[n];
temp = 11 - temp % 11;
if (temp > 9)
     temp = 1 - temp % 10;
resultado = resultado * 10 + temp;
return resultado;

_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

El cálculo del dígito de control del EAN13 no funciona sin embargo este otro código que detallo y está en el foro de consultas como validación cambiándolo a que devuelva el dígito funciona perfectamente.

int DGC_Barras_EAN13(char CodBarra[])
{
char* Factor = "131313131313";
int Acum = 0, i;
int Dig=0;
for (i=0; i<12; i++)
{
Acum+=(CodBarra[i]-'0')*(Factor[i]-'0');
}
Dig = (Acum % 10);
if(Dig)
{
Dig=10-Dig;
}

return Dig;

Gracias por estos foros
_________________
Asun
Volver arriba
Ver perfil de usuario Enviar mensaje privado MSN Messenger
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.