WindowsXP/ds/security/passport/common/utilities/birthdatefunctions.cpp
2025-04-27 07:49:33 -04:00

94 lines
2.5 KiB
C++

//-----------------------------------------------------------------------------
//
// @doc
//
// @module BirthdateFunctions.cpp | Implementation of birthdate functions.
//
// Author: Darren Anderson
//
// Date: 5/10/00
//
//-----------------------------------------------------------------------------
#include "stdafx.h"
#include "BirthdateFunctions.h"
//-----------------------------------------------------------------------------
//
// @func Determine if the given birthdate represents an under 13 age
// relative to the current date/time on the machine.
//
//-----------------------------------------------------------------------------
bool
IsUnder13(
DATE dtBirthdate // @parm The birthdate to check.
)
{
return IsUnder(dtBirthdate, 13);
}
//-----------------------------------------------------------------------------
//
// @func Determine if the given birthdate represents an under 18 age
// relative to the current date/time on the machine.
//
//-----------------------------------------------------------------------------
bool
IsUnder18(
DATE dtBirthdate // @parm The birthdate to check.
)
{
return IsUnder(dtBirthdate, 18);
}
//-----------------------------------------------------------------------------
//
// @func Determine if the given birthdate represents an under 13 age
// relative to the current date/time on the machine.
//
//-----------------------------------------------------------------------------
bool IsUnder(
DATE dtBirthdate, // @parm The birthdate to check.
USHORT ulAge // @parm Age in years to check for.
)
{
bool bIsUnder = false;
SYSTEMTIME stBirthdate;
SYSTEMTIME stNow;
// Convert birthdate to system time.
if(!VariantTimeToSystemTime(dtBirthdate, &stBirthdate))
{
goto Cleanup;
}
// Get current time.
GetSystemTime(&stNow);
// Compare years.
if(stNow.wYear - stBirthdate.wYear > ulAge)
goto Cleanup;
if(stNow.wYear - stBirthdate.wYear < ulAge)
{
bIsUnder = true;
goto Cleanup;
}
// Years are equal, compare months.
if(stNow.wMonth > stBirthdate.wMonth)
goto Cleanup;
if(stNow.wMonth < stBirthdate.wMonth)
{
bIsUnder = true;
goto Cleanup;
}
// Months are equal, compare days.
bIsUnder = (stNow.wDay < stBirthdate.wDay);
Cleanup:
return bIsUnder;
}