/** * @param $dateOfBirth * @return \DateTime */ protected function getDateOfBirth($dateOfBirth) { if (empty($dateOfBirth)) { $dateOfBirthParts = array(static::numberBetween(1800, 2099)); } else { $dateOfBirthParts = explode('-', $dateOfBirth); } $baseDate = \Faker\Provider\DateTime::dateTimeBetween("first day of {$dateOfBirthParts[0]}", "last day of {$dateOfBirthParts[0]}"); switch (count($dateOfBirthParts)) { case 1: $dateOfBirthParts[] = $baseDate->format('m'); //don't break, we need the day also //don't break, we need the day also case 2: $dateOfBirthParts[] = $baseDate->format('d'); //don't break, next line will //don't break, next line will case 3: break; default: throw new \InvalidArgumentException("Invalid date of birth - must be null or in the 'Y-m-d', 'Y-m', 'Y' format"); } if ($dateOfBirthParts[0] < 1800 || $dateOfBirthParts[0] > 2099) { throw new \InvalidArgumentException("Invalid date of birth - year must be between 1900 and 2099, '{$dateOfBirthParts[0]}' received"); } $dateOfBirthFinal = implode('-', $dateOfBirthParts); $date = \DateTime::createFromFormat('Y-m-d', $dateOfBirthFinal); //a full (invalid) date might have been supplied, check if it converts if ($date->format('Y-m-d') !== $dateOfBirthFinal) { throw new \InvalidArgumentException("Invalid date of birth - '{$date->format('Y-m-d')}' generated based on '{$dateOfBirth}' received"); } return $date; }
/** * National Individual Identification Numbers * * @link http://egov.kz/wps/portal/!utWCM/p/b1/04_Sj9S1tDAwMzY1NjLTj9CPykssy0xPLMnMz0vMAfGjzOKDvDxNnJwMHQ0sTMOMDBxNPJ2dggNCg13MDIEKIpEVGFiGOIMUuIcFOJkZGxgYE6ffAAdwNCCkP1w_ClUJFheAFeCxws8jPzdVPzcqx83SU9cRADxWbyg!/dl4/d5/L0lDUmlTUSEhL3dHa0FKRnNBLzRKVXFDQSEhL2Vu/ * @param \DateTime $birthDate * @return string 12 digits, like 780322300455 */ public static function individualIdentificationNumber(\DateTime $birthDate = null) { if (!$birthDate) { $birthDate = \Faker\Provider\DateTime::dateTimeBetween(); } $dateAsString = $birthDate->format('ymd'); $genderAndCenturyId = (string) static::numberBetween(1, 6); $randomDigits = (string) static::numerify('#####'); return $dateAsString . $genderAndCenturyId . $randomDigits; }
/** * @link https://en.wikipedia.org/wiki/National_identification_number#South_Africa * * @param int $minAge * @param int $maxAge * @param bool $citizen * @param string $gender * * @return string */ public function idNumber($minAge = 16, $maxAge = 100, $citizen = true, $gender = null) { 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 = rand(0, 9); } $citizenDigit = $citizen === true ? '0' : '1'; $birthDateString = DateTime::dateTimeBetween(sprintf('-%d years', $maxAge), sprintf('-%d years', $minAge))->format('ymd'); $sequenceDigits = str_pad(self::randomNumber(3), 3, 0, STR_PAD_BOTH); $raceDigit = self::randomNumber(1); $partialIdNumber = $birthDateString . $genderDigit . $sequenceDigits . $citizenDigit . $raceDigit; $idNumber = $partialIdNumber . Luhn::computeCheckDigit($partialIdNumber); return $idNumber; }
public function testFixedSeedWithMaximumTimestamp() { $max = '2018-03-01 12:00:00'; mt_srand(1); $unixTime = DateTimeProvider::unixTime($max); $datetimeAD = DateTimeProvider::dateTimeAD($max); $dateTime1 = DateTimeProvider::dateTime($max); $dateTimeBetween = DateTimeProvider::dateTimeBetween('2014-03-01 06:00:00', $max); $date = DateTimeProvider::date('Y-m-d', $max); $time = DateTimeProvider::time('H:i:s', $max); $iso8601 = DateTimeProvider::iso8601($max); $dateTimeThisCentury = DateTimeProvider::dateTimeThisCentury($max); $dateTimeThisDecade = DateTimeProvider::dateTimeThisDecade($max); $dateTimeThisMonth = DateTimeProvider::dateTimeThisMonth($max); $amPm = DateTimeProvider::amPm($max); $dayOfMonth = DateTimeProvider::dayOfMonth($max); $dayOfWeek = DateTimeProvider::dayOfWeek($max); $month = DateTimeProvider::month($max); $monthName = DateTimeProvider::monthName($max); $year = DateTimeProvider::year($max); $dateTimeThisYear = DateTimeProvider::dateTimeThisYear($max); mt_srand(); //regenerate Random Date with same seed and same maximum end timestamp mt_srand(1); $this->assertEquals($unixTime, DateTimeProvider::unixTime($max)); $this->assertEquals($datetimeAD, DateTimeProvider::dateTimeAD($max)); $this->assertEquals($dateTime1, DateTimeProvider::dateTime($max)); $this->assertEquals($dateTimeBetween, DateTimeProvider::dateTimeBetween('2014-03-01 06:00:00', $max)); $this->assertEquals($date, DateTimeProvider::date('Y-m-d', $max)); $this->assertEquals($time, DateTimeProvider::time('H:i:s', $max)); $this->assertEquals($iso8601, DateTimeProvider::iso8601($max)); $this->assertEquals($dateTimeThisCentury, DateTimeProvider::dateTimeThisCentury($max)); $this->assertEquals($dateTimeThisDecade, DateTimeProvider::dateTimeThisDecade($max)); $this->assertEquals($dateTimeThisMonth, DateTimeProvider::dateTimeThisMonth($max)); $this->assertEquals($amPm, DateTimeProvider::amPm($max)); $this->assertEquals($dayOfMonth, DateTimeProvider::dayOfMonth($max)); $this->assertEquals($dayOfWeek, DateTimeProvider::dayOfWeek($max)); $this->assertEquals($month, DateTimeProvider::month($max)); $this->assertEquals($monthName, DateTimeProvider::monthName($max)); $this->assertEquals($year, DateTimeProvider::year($max)); $this->assertEquals($dateTimeThisYear, DateTimeProvider::dateTimeThisYear($max)); mt_srand(); }
/** * Return a valid company registration number. * * @return string */ public function companyNumber() { return sprintf('%s/%s/%s', \Faker\Provider\DateTime::dateTimeBetween('-50 years', 'now')->format('Y'), static::randomNumber(6, true), static::randomElement(static::$legalEntities)); }