
Calcular edad
Started by
corsario
, Jul 24 2010 07:18 AM
9 replies to this topic
#1
Posted 24 July 2010 - 07:18 AM
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.
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.
#2
Posted 24 July 2010 - 09:04 AM
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
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
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Mask, DBCtrls, StdCtrls, strUtils; type TForm1 = class(TForm) Edit1: TEdit; DBEdit1: TDBEdit; Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} function FechaNacimiento(E: TDBEdit): TDate; var Y, M, D: Word; begin Y := StrToInt(LeftStr(E.Text, 2)); if Y < 20 then Y := Y + 2000 else y:= Y + 1900; M := StrToInt(Copy(E.Text, 3, 2)); D := StrToInt(Copy(E.Text, 5, 2)); Result := EncodeDate(Y, M, D); end; function CalcularEdad(Nacimiento, FechaActual: TDate): Integer; var Month, Day, Year, CurrentYear, CurrentMonth, CurrentDay: Word; begin DecodeDate(Nacimiento, Year, Month, Day); DecodeDate(FechaActual, CurrentYear, CurrentMonth, CurrentDay); if (Year = CurrentYear) and (Month = CurrentMonth) and (Day = CurrentDay) then begin Result := 0; end else begin Result := CurrentYear - Year; if (Month > CurrentMonth) then Dec(Result) else begin if Month = CurrentMonth then if (Day > CurrentDay) then Dec(Result); end; end; end; procedure TForm1.Button1Click(Sender: TObject); begin Showmessage(IntToStr(CalcularEdad(FechaNacimiento(DBEdit1), Date) )); end; end.
#3
Posted 24 July 2010 - 09:05 AM
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
//uses StrUtils procedure TForm1.btn1Click(Sender: TObject); begin Caption:= AnsiMidStr( '0805198580783', 5, 4 ) end;
#4
Posted 24 July 2010 - 09:23 AM
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.
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
delphi
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
#5
Posted 24 July 2010 - 11:31 AM
Hola
Mi aportación con la misma "salvedad" del año 20 .....
Salud OS
Mi aportación con la misma "salvedad" del año 20 .....
delphi
procedure TForm1.Button1Click(Sender: TObject); var edad: word; nacido: string; fechaNac: TDateTime; begin nacido := copy('74022735225',1,6); if copy(nacido,1,2) > '20' then insert('19',nacido,1) else insert('20',nacido,1); fechaNac := encodedate(strtoint(copy(nacido,1,4)), strtoint(copy(nacido,5,2)), strtoint(copy(nacido,7,2))); edad := YearsBetween(Now,fechaNac); ShowMessage(inttostr(edad)); end;
Salud OS
#6
Posted 24 July 2010 - 12:23 PM
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
pero es que mi dia de nacimiento no ha llegado.
, por eso wilson utiliza el dec()


#7
Posted 24 July 2010 - 12:33 PM
eduarcol, on 24 Jul 2010 - 6:23 PM, said:
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
pero es que mi dia de nacimiento no ha llegado.
, por eso wilson utiliza el dec()
Prueba con estos datos
delphi
nacido := copy('64072335225',1,6); // 23 de julio 1964 nacido := copy('64072435225',1,6); // 24 de julio 1964 nacido := copy('64072535225',1,6); // 25 de julio 1964 // now = 24 julio 2010
Salud OS
#8
Posted 27 July 2010 - 07:55 AM
No he probado pero me imagino que debe funcionar jejeje perdon pues
#10
Posted 28 July 2010 - 11:13 AM
A todos muchas gracias, probaré el código y luego les digo