Ir al contenido


Foto

Calcular edad


  • Por favor identifícate para responder
9 respuestas en este tema

#1 corsario

corsario

    Newbie

  • Miembros
  • Pip
  • 2 mensajes

Escrito 24 julio 2010 - 07:18

Saludos a todos,

Tengo el siguiente problema, necesito calcular la edad de cualquier persona, las personas las tengo en una base de datos de access, en dicha base de datos tengo un campo que es el carné de identidad, el mismo consta de 11 dígitos, los 6 primeros se refieren a la fecha de nacimiento es decir(aammdd), algo como esto(mi # de identidad es: 74022735225), necesito un código que me haga el calculo, para saber la edad exacta de cada persona.

Nota: estoy utilizando delphi7 y no soy programador, estoy intentando aprender.

Desde ya muchas gracias.
  • 0

#2 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.137 mensajes

Escrito 24 julio 2010 - 09:04

Amigo  aquí te pongo un código  que te puede ayudar en algo, presumiendo que solo permitimos nacidos despues de 1920.  Obviamente se puede ajustar a lo que tu pretendes.

La función FechaNacimiento toma el valor de el campo en cuestión a partir de un DBEdit, para probar puedes cambiar la declaración a un TEdit.

Queda el problema para los que nazcan despues del 2020, pero de aquí a allá ya has desarrollado otro algoritmo.  jajajja



delphi
  1. unit Unit1;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7.   Dialogs, Mask, DBCtrls, StdCtrls, strUtils;
  8.  
  9. type
  10.   TForm1 = class(TForm)
  11.     Edit1: TEdit;
  12.     DBEdit1: TDBEdit;
  13.     Button1: TButton;
  14.     procedure Button1Click(Sender: TObject);
  15.  
  16.   private
  17.     { Private declarations }
  18.   public
  19.     { Public declarations }
  20.   end;
  21.  
  22. var
  23.   Form1: TForm1;
  24.  
  25. implementation
  26.  
  27. {$R *.dfm}
  28.  
  29. function FechaNacimiento(E: TDBEdit): TDate;
  30. var
  31.   Y, M, D: Word;
  32. begin
  33.   Y := StrToInt(LeftStr(E.Text, 2));
  34.   if Y < 20 then
  35.     Y := Y + 2000
  36.   else
  37.   y:= Y + 1900;
  38.   M := StrToInt(Copy(E.Text, 3, 2));
  39.   D := StrToInt(Copy(E.Text, 5, 2));
  40.   Result := EncodeDate(Y, M, D);
  41. end;
  42.  
  43. function CalcularEdad(Nacimiento, FechaActual: TDate): Integer;
  44. var
  45.   Month, Day, Year, CurrentYear, CurrentMonth, CurrentDay: Word;
  46. begin
  47.   DecodeDate(Nacimiento, Year, Month, Day);
  48.   DecodeDate(FechaActual, CurrentYear, CurrentMonth, CurrentDay);
  49.   if (Year = CurrentYear) and (Month = CurrentMonth) and (Day = CurrentDay) then
  50.   begin
  51.     Result := 0;
  52.   end
  53.   else
  54.   begin
  55.     Result := CurrentYear - Year;
  56.     if (Month > CurrentMonth) then
  57.       Dec(Result)
  58.     else
  59.     begin
  60.       if Month = CurrentMonth then
  61.         if (Day > CurrentDay) then
  62.           Dec(Result);
  63.     end;
  64.   end;
  65. end;
  66.  
  67. procedure TForm1.Button1Click(Sender: TObject);
  68. begin
  69. Showmessage(IntToStr(CalcularEdad(FechaNacimiento(DBEdit1), Date) ));
  70. end;
  71.  
  72. end.


  • 0

#3 look

look

    Advanced Member

  • Miembros
  • PipPipPip
  • 418 mensajes
  • LocationLa Ceiba-Atlantida-Honduras

Escrito 24 julio 2010 - 09:05

prueba con el AnsiMidStr, este es un codigo de id de mi pais, la idea sera la misma, este te devolvera el año, del cual solo tendras que restarle con el año actual


delphi
  1. //uses StrUtils
  2. procedure TForm1.btn1Click(Sender: TObject);
  3. begin
  4. Caption:=  AnsiMidStr( '0805198580783', 5, 4 )
  5. end;


  • 0

#4 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.137 mensajes

Escrito 24 julio 2010 - 09:23

Adicionalmente si lo que quieres es algo mas preciso, puede usar la funcion de Delphi que calcula el número de días entre dos fechas.



delphi
  1. function DaysBetween(const ANow, AThen: TDateTime): Integer;



Y le pasas en el primer parámetro  la Fecha actual y en el sugundo  la función FechaNacimiento de mi primer Post,  con el valor obtenido en días ya te queda mucho más fácil calcular los años, los meses y los días

Saludos
  • 0

#5 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.446 mensajes
  • LocationMéxico

Escrito 24 julio 2010 - 11:31

Hola

Mi aportación con la misma "salvedad" del año 20 .....



delphi
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. var
  3.   edad: word;
  4.   nacido: string;
  5.   fechaNac: TDateTime;
  6. begin
  7.   nacido := copy('74022735225',1,6);
  8.   if copy(nacido,1,2) > '20' then
  9.     insert('19',nacido,1)
  10.   else insert('20',nacido,1);
  11.   fechaNac := encodedate(strtoint(copy(nacido,1,4)),
  12.                         strtoint(copy(nacido,5,2)),
  13.                         strtoint(copy(nacido,7,2)));
  14.   edad := YearsBetween(Now,fechaNac);
  15.   ShowMessage(inttostr(edad));
  16. end;



Salud OS
  • 0

#6 eduarcol

eduarcol

    Advanced Member

  • Administrador
  • 4.483 mensajes
  • LocationVenezuela

Escrito 24 julio 2010 - 12:23

Amigo ese codigo te da los años de una persona pero no su edad exacta, supon mi casa 05/11 con ese codigo tendria 32 años  :grin:  pero es que mi dia de nacimiento no ha llegado.  :p, por eso wilson utiliza el dec()
  • 0

#7 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.446 mensajes
  • LocationMéxico

Escrito 24 julio 2010 - 12:33

Amigo ese codigo te da los años de una persona pero no su edad exacta, supon mi casa 05/11 con ese codigo tendria 32 años  :grin:  pero es que mi dia de nacimiento no ha llegado.  :p, por eso wilson utiliza el dec()


Prueba con estos datos



delphi
  1.   nacido := copy('64072335225',1,6); // 23 de julio 1964
  2.  
  3.   nacido := copy('64072435225',1,6); // 24 de julio 1964
  4.  
  5.   nacido := copy('64072535225',1,6); // 25 de julio 1964
  6.  
  7.   // now = 24 julio 2010



Salud OS

  • 0

#8 eduarcol

eduarcol

    Advanced Member

  • Administrador
  • 4.483 mensajes
  • LocationVenezuela

Escrito 27 julio 2010 - 07:55

No he probado pero me imagino que debe funcionar jejeje perdon pues
  • 0

#9 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.446 mensajes
  • LocationMéxico

Escrito 27 julio 2010 - 08:00

No he probado pero me imagino que debe funcionar jejeje perdon pues


No no, dele, dele que así llegamos a un dato exacto, si hay que modificar se modifica ;) :)

Salud OS
  • 0

#10 corsario

corsario

    Newbie

  • Miembros
  • Pip
  • 2 mensajes

Escrito 28 julio 2010 - 11:13

A todos muchas gracias, probaré el código y luego les digo
  • 0




IP.Board spam blocked by CleanTalk.