
Calcular edad
#1
Posted 24 July 2010 - 07:18 AM
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
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
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
//uses StrUtils procedure TForm1.btn1Click(Sender: TObject); begin Caption:= AnsiMidStr( '0805198580783', 5, 4 ) end;
#4
Posted 24 July 2010 - 09:23 AM
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
Mi aportación con la misma "salvedad" del año 20 .....
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


#7
Posted 24 July 2010 - 12:33 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()
Prueba con estos datos
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
#9
Posted 27 July 2010 - 08:00 AM
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
#10
Posted 28 July 2010 - 11:13 AM