public function idNumber(\DateTime $birthdate = null, $citizen = true, $gender = null)
{
if (!$birthdate) {
$birthdate = $this->generator->dateTimeThisCentury();
}
$birthDateString = $birthdate->format('ymd');
switch (strtolower($gender)) {
case static::GENDER_FEMALE:
$genderDigit = self::numberBetween(0, 4);
break;
case static::GENDER_MALE:
$genderDigit = self::numberBetween(5, 9);
break;
default:
$genderDigit = self::numberBetween(0, 9);
}
$sequenceDigits = str_pad(self::randomNumber(3), 3, 0, STR_PAD_BOTH);
$citizenDigit = $citizen === true ? '0' : '1';
$raceDigit = self::randomNumber(1);
$partialIdNumber = $birthDateString . $genderDigit . $sequenceDigits . $citizenDigit . $raceDigit;
return $partialIdNumber . Luhn::computeCheckDigit($partialIdNumber);
}