Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Algoritmo!!! (https://www.clubdelphi.com/foros/showthread.php?t=44789)

Ledian_Fdez 14-06-2007 15:56:04

Algoritmo!!!
 
Holas amigos:

Alguien conoce de algun algorito o funcion en C++Builder, que me sirva para saber si un No. de Carnet de Identidad es valido, al menos sus primeros 6 digitos.

Salu2
Ledian.

ArdiIIa 14-06-2007 16:16:53

Supongo que te refieres al NIF, el cual, supongo que no debería ser muy problemático traspasarlo a C++

Ledian_Fdez 14-06-2007 22:53:45

funcion CI
 
Amigos mios:

El carnet de Identidad consta de 11 digitos, y yo lo que quiero es hacer una funcion que me permita substraer los primeros 6 digitos (estos corresponde con la fecha de nacimiento) y de ahí separarlos de 2 en 2, por ejemplo:

CI = 81042805227
8104028 = fecha de nacimiento
81 = año
04 = mes
28 = día

y quiciera validar si esa fecha es correcta

salu2
Ledian:confused:

AntonioG 15-06-2007 23:28:02

Hola,

Que llevas hecho?

En que tienes almacenado ese carnet de identidad? (char *, AnsiString)

Saludos

Ledian_Fdez 18-06-2007 20:09:41

Ci?
 
El carnet de identidad lo guardo en una variable de tipo String.
Y hasta ahora lo que se me ocurre es ir tomando de 2 en dos lo 6 primeros caracteres, la complicacion de todo esto es como sabes si es una fecha valida. Digamos por ejemplo cuando un mes trae 30, 31, 28 o 29.

Salu2
Ledian:mad:

AntonioG 18-06-2007 21:08:17

Hola,

Pues todos los meses son faciles de checar menos Febrero, por eso de los años bisiestos, los meses siempre tienen este numero de dias:
Enero 31
Febrero 28 o 29
Marzo 31
Abril 30
Mayo 31
Junio 30
Julio 31
Agosto 31
Septiembre 30
Octubre 31
Noviembre 30
Dicienmbro 31


De la formula es apara clauyclar cuando un año es bisiesto ahorita no al tengo, al rato la busoc bien, solo me acuerdo algo como que si un año es multiplo de 4 pero no de 400 es bisiesto )al rato lo busco bien=.
Para saber si es multiplo, pues usas el operador modulo )o residuo de division entera= :%

Se usa asi:
supongamos que el numeor lo guardas en n, en tonces i:
n%4==0 <---es multiplo de 4
n%4!=0 <---NO es multiplo de 4

Asi que para 400, pues queda asi:

n%400==0 <---es multiplo de 400
n%400!=0 <---NO es multiplo de 400

Saludos

roman 18-06-2007 21:39:36

Prueba con esta función:

Código Delphi [-]
function EsFechaValida(S: String): Boolean;
var
  Y, M, D: Word;
  Fecha: TDateTime;

begin
  Y := StrToIntDef(Copy(S, 1, 2), 0);
  M := StrToIntDef(Copy(S, 3, 2), 0);
  D := StrToIntDef(Copy(S, 5, 2), 0);

  if Y*M*D > 0 then
    Result := TryEncodeDate(Y + 1900, M, D, Fecha)
  else
    Result := false;
end;

Y por cierto, trata de dar títulos más descriptivos para tus mensajes.

// Saludos

AntonioG 18-06-2007 22:17:50

Hola,

Basandome en lo que puso roman y en algo que viene en la ayuda de CBuilder, para CBuilder seria asi:
Código:

void __fastcall TForm1::Button1Click(TObject *Sender)

{
  TDateTime dt;
  AnsiString  fecha;//<--aqui va la fecha

  try
  {
    dt = EncodeDate((Word)StrToInt("19"+fecha.SubString(1,2)), (Word)StrToInt(fecha.SubString(3,2)), (Word)StrToInt(fecha.SubString(5,2)));
    Label1->Caption = DateToStr(dt);
  }
  catch(...)
  {
    Application->MessageBox("Invalid day, month, or year.", "EncodeDate Example", MB_OK);
  }
}

En fecha va primero el año, luego el mes y leugo el dia, pro eemplo:
fecha="810227";


Saludos
P.D. La linea
Label1->Caption = DateToStr(dt);
la puedes quitar.


La franja horaria es GMT +2. Ahora son las 00:31:55.

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