 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
TOÑO Master

Registrado: 26 Ago 2002Mensajes: 223Ubicación: Madrid - España -
|
Publicado: Mar 18 Nov, 2003 4:55 pm Asunto: Letra DNI,Nº AÑOS, DIGITO CONTROL CUENTA , D.CONTROL EAN 13 |
|
|
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 |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Mie 19 Nov, 2003 9:06 am Asunto: |
|
|
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 |
|
 |
SumSum Lt JG


Registrado: 06 Oct 2002Mensajes: 52
|
Publicado: Jue 21 Dic, 2006 11:37 pm Asunto: |
|
|
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 |
|
 |
|
|
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
|
© 2002–2026 Club Builder · Funciona con phpBB.
|