36 lines
882 B
TypeScript
36 lines
882 B
TypeScript
/**
|
|
* Validação de +18 anos — sempre executada no servidor.
|
|
* Nunca confiar no cliente para esta verificação.
|
|
*/
|
|
export function isAdult(birthdate: Date): boolean {
|
|
const today = new Date();
|
|
const age18 = new Date(
|
|
birthdate.getFullYear() + 18,
|
|
birthdate.getMonth(),
|
|
birthdate.getDate()
|
|
);
|
|
return today >= age18;
|
|
}
|
|
|
|
export function validateAge(birthdateStr: string): {
|
|
valid: boolean;
|
|
error?: string;
|
|
} {
|
|
const birthdate = new Date(birthdateStr);
|
|
|
|
if (isNaN(birthdate.getTime())) {
|
|
return { valid: false, error: 'Data de nascimento inválida.' };
|
|
}
|
|
|
|
const now = new Date();
|
|
if (birthdate > now) {
|
|
return { valid: false, error: 'Data de nascimento não pode ser no futuro.' };
|
|
}
|
|
|
|
if (!isAdult(birthdate)) {
|
|
return { valid: false, error: 'Tens de ter pelo menos 18 anos para criar conta.' };
|
|
}
|
|
|
|
return { valid: true };
|
|
}
|