/** * Generate a Luhn compliant number. * * @param string $prefix * @return string */ public static function generateLuhnNumber($partialValue) { if (!preg_match('/^\\d+$/', $partialValue)) { throw new InvalidArgumentException('Argument should be an integer.'); } return $partialValue . Luhn::computeCheckDigit($partialValue); }
public function testSirenReturnsAWellFormattedSiren() { $siren = $this->faker->siren(); $this->assertRegExp("/^\\d{3}\\s\\d{3}\\s\\d{3}\$/", $siren); $siren = str_replace(' ', '', $siren); $this->assertTrue(Luhn::isValid($siren)); }
/** * 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; }
/** * Returns the String of a credit card number. * * @param string $type Supporting any of 'Visa', 'MasterCard', 'American Express', and 'Discover' * @param boolean $formatted Set to true if the output string should contain one separator every 4 digits * @param string $separator Separator string for formatting card number. Defaults to dash (-). * @return string * * @example '4485480221084675' */ public static function creditCardNumber($type = null, $formatted = false, $separator = '-') { if (is_null($type)) { $type = static::creditCardType(); } $mask = static::randomElement(static::$cardParams[$type]); $number = static::numerify($mask); $number .= Luhn::computeCheckDigit($number); if ($formatted) { $p1 = substr($number, 0, 4); $p2 = substr($number, 4, 4); $p3 = substr($number, 8, 4); $p4 = substr($number, 12); $number = $p1 . $separator . $p2 . $separator . $p3 . $separator . $p4; } return $number; }
/** * @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; }
/** * @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(\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); }
public function testImeiReturnsValidNumber() { $imei = $this->faker->imei(); $this->assertTrue(Luhn::isValid($imei)); }
public function testPersonalIdentityNumberGeneratesLuhnCompliantNumbers() { $pin = str_replace('-', '', $this->faker->personalIdentityNumber()); $this->assertTrue(Luhn::isValid($pin)); }
/** * Generates a siren number (9 digits) that passes the Luhn check. * * @see http://fr.wikipedia.org/wiki/Syst%C3%A8me_d%27identification_du_r%C3%A9pertoire_des_entreprises * @return string */ public function siren($formatted = true) { $siren = $this->numerify('%#######'); $siren .= Luhn::computeCheckDigit($siren); if ($formatted) { $siren = substr($siren, 0, 3) . ' ' . substr($siren, 3, 3) . ' ' . substr($siren, 6, 3); } return $siren; }
/** * @example 2010101010 */ public static function foreignerIdNumber() { $partialValue = static::numerify(2 . str_repeat('#', 8)); return Luhn::generateLuhnNumber($partialValue); }
/** * @expectedException InvalidArgumentException * @expectedExceptionMessage Argument should be an integer. */ public function testGenerateLuhnNumberWithInvalidPrefix() { Luhn::generateLuhnNumber('abc'); }
/** * @dataProvider validatorProvider */ public function testIsValid($number, $isValid) { $this->assertEquals($isValid, Luhn::isValid($number)); }
/** * @dataProvider creditCardNumberProvider */ public function testCreditCardNumberReturnsValidCreditCardNumber($type, $regexp) { $cardNumber = $this->faker->creditCardNumber($type); $this->assertRegExp($regexp, $cardNumber); $this->assertTrue(Luhn::isValid($cardNumber)); }
/** * example 7001010101 **/ public static function companyIdNumber() { $partialValue = static::numerify(700 . str_repeat('#', 6)); return Luhn::generateLuhnNumber($partialValue); }
/** * International Mobile Equipment Identity (IMEI) * * @link http://en.wikipedia.org/wiki/International_Mobile_Station_Equipment_Identity * @link http://imei-number.com/imei-validation-check/ * @example '720084494799532' * @return int $imei */ public function imei() { $imei = (string) static::numerify('##############'); $imei .= Luhn::computeCheckDigit($imei); return $imei; }