Luhn algorithm is used to validate credit card numbers, IMEI numbers, and National Provider Identifier numbers.
See also: http://en.wikipedia.org/wiki/Luhn_algorithm
コード例 #1
0
ファイル: Luhn.php プロジェクト: fzaninotto/faker
 /**
  * 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);
 }
コード例 #2
0
 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));
 }
コード例 #3
0
ファイル: Person.php プロジェクト: avbrugen/uace-laravel
 /**
  * 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;
 }
コード例 #4
0
 /**
  * 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;
 }
コード例 #5
0
ファイル: Payment.php プロジェクト: wozhen/yii2-cms-writedown
 /**
  * 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;
 }
コード例 #6
0
ファイル: Person.php プロジェクト: smithandre/Faker
 /**
  * @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;
 }
コード例 #7
0
ファイル: Person.php プロジェクト: fzaninotto/faker
 /**
  * @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);
 }
コード例 #8
0
 public function testImeiReturnsValidNumber()
 {
     $imei = $this->faker->imei();
     $this->assertTrue(Luhn::isValid($imei));
 }
コード例 #9
0
 public function testPersonalIdentityNumberGeneratesLuhnCompliantNumbers()
 {
     $pin = str_replace('-', '', $this->faker->personalIdentityNumber());
     $this->assertTrue(Luhn::isValid($pin));
 }
コード例 #10
0
ファイル: Company.php プロジェクト: fzaninotto/faker
 /**
  * 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;
 }
コード例 #11
0
ファイル: Person.php プロジェクト: fzaninotto/faker
 /**
  * @example 2010101010
  */
 public static function foreignerIdNumber()
 {
     $partialValue = static::numerify(2 . str_repeat('#', 8));
     return Luhn::generateLuhnNumber($partialValue);
 }
コード例 #12
0
ファイル: LuhnTest.php プロジェクト: fzaninotto/faker
 /**
  * @expectedException        InvalidArgumentException
  * @expectedExceptionMessage Argument should be an integer.
  */
 public function testGenerateLuhnNumberWithInvalidPrefix()
 {
     Luhn::generateLuhnNumber('abc');
 }
コード例 #13
0
 /**
  * @dataProvider validatorProvider
  */
 public function testIsValid($number, $isValid)
 {
     $this->assertEquals($isValid, Luhn::isValid($number));
 }
コード例 #14
0
 /**
  * @dataProvider creditCardNumberProvider
  */
 public function testCreditCardNumberReturnsValidCreditCardNumber($type, $regexp)
 {
     $cardNumber = $this->faker->creditCardNumber($type);
     $this->assertRegExp($regexp, $cardNumber);
     $this->assertTrue(Luhn::isValid($cardNumber));
 }
コード例 #15
0
ファイル: Company.php プロジェクト: fzaninotto/faker
 /**
  * example 7001010101
  **/
 public static function companyIdNumber()
 {
     $partialValue = static::numerify(700 . str_repeat('#', 6));
     return Luhn::generateLuhnNumber($partialValue);
 }
コード例 #16
0
 /**
  * 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;
 }