Example #1
1
 /**
  * National Personal Identity number (personnummer)
  * @link https://no.wikipedia.org/wiki/Personnummer
  * @param \DateTime $birthdate
  * @param string $gender Person::GENDER_MALE || Person::GENDER_FEMALE
  * @return string on format DDMMYY#####
  */
 public function personalIdentityNumber(\DateTime $birthdate = null, $gender = null)
 {
     if (!$birthdate) {
         $birthdate = \Faker\Provider\DateTime::dateTimeThisCentury();
     }
     $datePart = $birthdate->format('dmy');
     /**
      * @todo These number should be random based on birth year
      * @link http://no.wikipedia.org/wiki/F%C3%B8dselsnummer
      */
     $randomDigits = (string) static::numerify('##');
     switch ($gender) {
         case static::GENDER_MALE:
             $genderDigit = static::randomElement(array(1, 3, 5, 7, 9));
             break;
         case static::GENDER_FEMALE:
             $genderDigit = static::randomElement(array(0, 2, 4, 6, 8));
             break;
         default:
             $genderDigit = (string) static::numerify('#');
     }
     $digits = $datePart . $randomDigits . $genderDigit;
     /**
      * @todo Calculate modulo 11 of $digits
      * @link http://no.wikipedia.org/wiki/F%C3%B8dselsnummer
      */
     $checksum = (string) static::numerify('##');
     return $digits . $checksum;
 }
Example #2
0
 /**
  * PESEL - Universal Electronic System for Registration of the Population
  * @link http://en.wikipedia.org/wiki/PESEL
  * @param  DateTime $birthdate
  * @param  string   $sex       M for male or F for female
  * @return string   11 digit number, like 44051401358
  */
 public static function pesel($birthdate = null, $sex = null)
 {
     if ($birthdate === null) {
         $birthdate = \Faker\Provider\DateTime::dateTimeThisCentury();
     }
     $weights = array(1, 3, 7, 9, 1, 3, 7, 9, 1, 3);
     $length = count($weights);
     $fullYear = (int) $birthdate->format('Y');
     $year = (int) $birthdate->format('y');
     $month = $birthdate->format('m') + ((int) ($fullYear / 100) - 14) % 5 * 20;
     $day = $birthdate->format('d');
     $result = array((int) ($year / 10), $year % 10, (int) ($month / 10), $month % 10, (int) ($day / 10), $day % 10);
     for ($i = 6; $i < $length; $i++) {
         $result[$i] = static::randomDigit();
     }
     if ($sex == "M") {
         $result[$length - 1] |= 1;
     } elseif ($sex == "F") {
         $result[$length - 1] ^= 1;
     }
     $checksum = 0;
     for ($i = 0; $i < $length; $i++) {
         $checksum += $weights[$i] * $result[$i];
     }
     $checksum = (10 - $checksum % 10) % 10;
     $result[] = $checksum;
     return implode('', $result);
 }
Example #3
0
 /**
  * National Personal Identity number (personas kods)
  * @link https://en.wikipedia.org/wiki/National_identification_number#Latvia
  * @param \DateTime $birthdate
  * @return string on format XXXXXX-XXXXX
  */
 public function personalIdentityNumber(\DateTime $birthdate = null)
 {
     if (!$birthdate) {
         $birthdate = \Faker\Provider\DateTime::dateTimeThisCentury();
     }
     $datePart = $birthdate->format('dmy');
     $randomDigits = (string) static::numerify('####');
     $checksum = Luhn::computeCheckDigit($datePart . $randomDigits);
     return $datePart . '-' . $randomDigits . $checksum;
 }
 /**
  * National Personal Identity number (personnummer)
  * @link http://en.wikipedia.org/wiki/Personal_identity_number_(Sweden)
  * @param \DateTime $birthdate
  * @param string $gender Person::GENDER_MALE || Person::GENDER_FEMALE
  * @return string on format XXXXXX-XXXX
  */
 public function personalIdentityNumber(\DateTime $birthdate = null, $gender = null)
 {
     if (!$birthdate) {
         $birthdate = \Faker\Provider\DateTime::dateTimeThisCentury();
     }
     $datePart = $birthdate->format('ymd');
     if ($gender && $gender == static::GENDER_MALE) {
         $randomDigits = (string) static::numerify('##') . static::randomElement(array(1, 3, 5, 7, 9));
     } elseif ($gender && $gender == static::GENDER_FEMALE) {
         $randomDigits = (string) static::numerify('##') . static::randomElement(array(0, 2, 4, 6, 8));
     } else {
         $randomDigits = (string) static::numerify('###');
     }
     $checksum = Luhn::computeCheckDigit($datePart . $randomDigits);
     return $datePart . '-' . $randomDigits . $checksum;
 }
Example #5
0
 /**
  * National Personal Identity Number (Henkilötunnus)
  * @link http://www.finlex.fi/fi/laki/ajantasa/2010/20100128
  * @param \DateTime $birthdate
  * @param string $gender Person::GENDER_MALE || Person::GENDER_FEMALE
  * @return string on format DDMMYYCZZZQ, where DDMMYY is the date of birth, C the century sign, ZZZ the individual number and Q the control character (checksum)
  */
 public function personalIdentityNumber(\DateTime $birthdate = null, $gender = null)
 {
     $checksumCharacters = '0123456789ABCDEFHJKLMNPRSTUVWXY';
     if (!$birthdate) {
         $birthdate = \Faker\Provider\DateTime::dateTimeThisCentury();
     }
     $datePart = $birthdate->format('dmy');
     switch ((int) ($birthdate->format('Y') / 100)) {
         case 18:
             $centurySign = '+';
             break;
         case 19:
             $centurySign = '-';
             break;
         case 20:
             $centurySign = 'A';
             break;
         default:
             throw new \InvalidArgumentException('Year must be between 1800 and 2099 inclusive.');
     }
     $randomDigits = self::numberBetween(0, 89);
     if ($gender && $gender == static::GENDER_MALE) {
         if ($randomDigits === 0) {
             $randomDigits .= static::randomElement(array(3, 5, 7, 9));
         } else {
             $randomDigits .= static::randomElement(array(1, 3, 5, 7, 9));
         }
     } elseif ($gender && $gender == static::GENDER_FEMALE) {
         if ($randomDigits === 0) {
             $randomDigits .= static::randomElement(array(2, 4, 6, 8));
         } else {
             $randomDigits .= static::randomElement(array(0, 2, 4, 6, 8));
         }
     } else {
         if ($randomDigits === 0) {
             $randomDigits .= self::numberBetween(2, 9);
         } else {
             $randomDigits .= (string) static::numerify('#');
         }
     }
     $randomDigits = str_pad($randomDigits, 3, '0', STR_PAD_LEFT);
     $checksum = $checksumCharacters[(int) ($datePart . $randomDigits) % strlen($checksumCharacters)];
     return $datePart . $centurySign . $randomDigits . $checksum;
 }
Example #6
0
 /**
  * National Personal Identity number (asmens kodas)
  * @link https://en.wikipedia.org/wiki/National_identification_number#Lithuania
  * @link https://lt.wikipedia.org/wiki/Asmens_kodas
  * @param string [male|female]
  * @param \DateTime $birthdate
  * @param string $randomNumber three integers
  * @return string on format XXXXXXXXXXX
  */
 public function personalIdentityNumber($gender = 'male', \DateTime $birthdate = null, $randomNumber = '')
 {
     if (!$birthdate) {
         $birthdate = \Faker\Provider\DateTime::dateTimeThisCentury();
     }
     $genderNumber = $gender == 'male' ? (int) 1 : (int) 0;
     $firstNumber = (int) floor($birthdate->format('Y') / 100) * 2 - 34 - $genderNumber;
     $datePart = $birthdate->format('ymd');
     $randomDigits = (string) (!$randomNumber || strlen($randomNumber < 3)) ? static::numerify('###') : substr($randomNumber, 0, 3);
     $partOfPerosnalCode = $firstNumber . $datePart . $randomDigits;
     $sum = self::calculateSum($partOfPerosnalCode, 1);
     $liekana = $sum % 11;
     if ($liekana !== 10) {
         $lastNumber = $liekana;
         return $firstNumber . $datePart . $randomDigits . $lastNumber;
     }
     $sum = self::calculateSum($partOfPerosnalCode, 2);
     $liekana = (int) $sum % 11;
     $lastNumber = $liekana !== 10 ? $liekana : 0;
     return $firstNumber . $datePart . $randomDigits . $lastNumber;
 }
 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();
 }