Buckets:
| namespace Faker\Provider; | |
| use Faker\Calculator\Iban; | |
| use Faker\Calculator\Luhn; | |
| class Payment extends Base | |
| { | |
| public static $expirationDateFormat = 'm/y'; | |
| protected static $cardVendors = [ | |
| 'Visa', 'Visa', 'Visa', 'Visa', 'Visa', | |
| 'MasterCard', 'MasterCard', 'MasterCard', 'MasterCard', 'MasterCard', | |
| 'American Express', 'Discover Card', 'Visa Retired', 'JCB', | |
| ]; | |
| /** | |
| * @var array List of card brand masks for generating valid credit card numbers | |
| * | |
| * @see https://en.wikipedia.org/wiki/Payment_card_number Reference for existing prefixes | |
| * @see https://www.mastercard.us/en-us/issuers/get-support/2-series-bin-expansion.html MasterCard 2017 2-Series BIN Expansion | |
| */ | |
| protected static $cardParams = [ | |
| 'Visa' => [ | |
| '4539###########', | |
| '4556###########', | |
| '4916###########', | |
| '4532###########', | |
| '4929###########', | |
| '40240071#######', | |
| '4485###########', | |
| '4716###########', | |
| '4##############', | |
| ], | |
| 'Visa Retired' => [ | |
| '4539########', | |
| '4556########', | |
| '4916########', | |
| '4532########', | |
| '4929########', | |
| '40240071####', | |
| '4485########', | |
| '4716########', | |
| '4###########', | |
| ], | |
| 'MasterCard' => [ | |
| '2221###########', | |
| '23#############', | |
| '24#############', | |
| '25#############', | |
| '26#############', | |
| '2720###########', | |
| '51#############', | |
| '52#############', | |
| '53#############', | |
| '54#############', | |
| '55#############', | |
| ], | |
| 'American Express' => [ | |
| '34############', | |
| '37############', | |
| ], | |
| 'Discover Card' => [ | |
| '6011###########', | |
| ], | |
| 'JCB' => [ | |
| '3528###########', | |
| '3589###########', | |
| ], | |
| ]; | |
| /** | |
| * @var array list of IBAN formats, source: @see https://www.swift.com/standards/data-standards/iban | |
| */ | |
| protected static $ibanFormats = [ | |
| 'AD' => [['n', 4], ['n', 4], ['c', 12]], | |
| 'AE' => [['n', 3], ['n', 16]], | |
| 'AL' => [['n', 8], ['c', 16]], | |
| 'AT' => [['n', 5], ['n', 11]], | |
| 'AZ' => [['a', 4], ['c', 20]], | |
| 'BA' => [['n', 3], ['n', 3], ['n', 8], ['n', 2]], | |
| 'BE' => [['n', 3], ['n', 7], ['n', 2]], | |
| 'BG' => [['a', 4], ['n', 4], ['n', 2], ['c', 8]], | |
| 'BH' => [['a', 4], ['c', 14]], | |
| 'BR' => [['n', 8], ['n', 5], ['n', 10], ['a', 1], ['c', 1]], | |
| 'CH' => [['n', 5], ['c', 12]], | |
| 'CR' => [['n', 4], ['n', 14]], | |
| 'CY' => [['n', 3], ['n', 5], ['c', 16]], | |
| 'CZ' => [['n', 4], ['n', 6], ['n', 10]], | |
| 'DE' => [['n', 8], ['n', 10]], | |
| 'DK' => [['n', 4], ['n', 9], ['n', 1]], | |
| 'DO' => [['c', 4], ['n', 20]], | |
| 'EE' => [['n', 2], ['n', 2], ['n', 11], ['n', 1]], | |
| 'EG' => [['n', 4], ['n', 4], ['n', 17]], | |
| 'ES' => [['n', 4], ['n', 4], ['n', 1], ['n', 1], ['n', 10]], | |
| 'FI' => [['n', 6], ['n', 7], ['n', 1]], | |
| 'FR' => [['n', 5], ['n', 5], ['c', 11], ['n', 2]], | |
| 'GB' => [['a', 4], ['n', 6], ['n', 8]], | |
| 'GE' => [['a', 2], ['n', 16]], | |
| 'GI' => [['a', 4], ['c', 15]], | |
| 'GR' => [['n', 3], ['n', 4], ['c', 16]], | |
| 'GT' => [['c', 4], ['c', 20]], | |
| 'HR' => [['n', 7], ['n', 10]], | |
| 'HU' => [['n', 3], ['n', 4], ['n', 1], ['n', 15], ['n', 1]], | |
| 'IE' => [['a', 4], ['n', 6], ['n', 8]], | |
| 'IL' => [['n', 3], ['n', 3], ['n', 13]], | |
| 'IS' => [['n', 4], ['n', 2], ['n', 6], ['n', 10]], | |
| 'IT' => [['a', 1], ['n', 5], ['n', 5], ['c', 12]], | |
| 'KW' => [['a', 4], ['n', 22]], | |
| 'KZ' => [['n', 3], ['c', 13]], | |
| 'LB' => [['n', 4], ['c', 20]], | |
| 'LI' => [['n', 5], ['c', 12]], | |
| 'LT' => [['n', 5], ['n', 11]], | |
| 'LU' => [['n', 3], ['c', 13]], | |
| 'LV' => [['a', 4], ['c', 13]], | |
| 'MC' => [['n', 5], ['n', 5], ['c', 11], ['n', 2]], | |
| 'MD' => [['c', 2], ['c', 18]], | |
| 'ME' => [['n', 3], ['n', 13], ['n', 2]], | |
| 'MK' => [['n', 3], ['c', 10], ['n', 2]], | |
| 'MR' => [['n', 5], ['n', 5], ['n', 11], ['n', 2]], | |
| 'MT' => [['a', 4], ['n', 5], ['c', 18]], | |
| 'MU' => [['a', 4], ['n', 2], ['n', 2], ['n', 12], ['n', 3], ['a', 3]], | |
| 'NL' => [['a', 4], ['n', 10]], | |
| 'NO' => [['n', 4], ['n', 6], ['n', 1]], | |
| 'PK' => [['a', 4], ['c', 16]], | |
| 'PL' => [['n', 8], ['n', 16]], | |
| 'PS' => [['a', 4], ['c', 21]], | |
| 'PT' => [['n', 4], ['n', 4], ['n', 11], ['n', 2]], | |
| 'RO' => [['a', 4], ['c', 16]], | |
| 'RS' => [['n', 3], ['n', 13], ['n', 2]], | |
| 'SA' => [['n', 2], ['c', 18]], | |
| 'SE' => [['n', 3], ['n', 16], ['n', 1]], | |
| 'SI' => [['n', 5], ['n', 8], ['n', 2]], | |
| 'SK' => [['n', 4], ['n', 6], ['n', 10]], | |
| 'SM' => [['a', 1], ['n', 5], ['n', 5], ['c', 12]], | |
| 'TN' => [['n', 2], ['n', 3], ['n', 13], ['n', 2]], | |
| 'TR' => [['n', 5], ['n', 1], ['c', 16]], | |
| 'VG' => [['a', 4], ['n', 16]], | |
| ]; | |
| /** | |
| * @return string Returns a credit card vendor name | |
| * | |
| * @example 'MasterCard' | |
| */ | |
| public static function creditCardType() | |
| { | |
| return static::randomElement(static::$cardVendors); | |
| } | |
| /** | |
| * Returns the String of a credit card number. | |
| * | |
| * @param string $type Supporting any of 'Visa', 'MasterCard', 'American Express', 'Discover' and 'JCB' | |
| * @param bool $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 (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; | |
| } | |
| /** | |
| * @param bool $valid True (by default) to get a valid expiration date, false to get a maybe valid date | |
| * | |
| * @return \DateTime | |
| * | |
| * @example 04/13 | |
| */ | |
| public function creditCardExpirationDate($valid = true) | |
| { | |
| if ($valid) { | |
| return $this->generator->dateTimeBetween('now', '36 months'); | |
| } | |
| return $this->generator->dateTimeBetween('-36 months', '36 months'); | |
| } | |
| /** | |
| * @param bool $valid True (by default) to get a valid expiration date, false to get a maybe valid date | |
| * @param string $expirationDateFormat | |
| * | |
| * @return string | |
| * | |
| * @example '04/13' | |
| */ | |
| public function creditCardExpirationDateString($valid = true, $expirationDateFormat = null) | |
| { | |
| return $this->creditCardExpirationDate($valid)->format(null === $expirationDateFormat ? static::$expirationDateFormat : $expirationDateFormat); | |
| } | |
| /** | |
| * @param bool $valid True (by default) to get a valid expiration date, false to get a maybe valid date | |
| * | |
| * @return array | |
| */ | |
| public function creditCardDetails($valid = true) | |
| { | |
| $type = static::creditCardType(); | |
| return [ | |
| 'type' => $type, | |
| 'number' => static::creditCardNumber($type), | |
| 'name' => $this->generator->name(), | |
| 'expirationDate' => $this->creditCardExpirationDateString($valid), | |
| ]; | |
| } | |
| /** | |
| * International Bank Account Number (IBAN) | |
| * | |
| * @see http://en.wikipedia.org/wiki/International_Bank_Account_Number | |
| * | |
| * @param string $countryCode ISO 3166-1 alpha-2 country code | |
| * @param string $prefix for generating bank account number of a specific bank | |
| * @param int $length total length without country code and 2 check digits | |
| * | |
| * @return string | |
| */ | |
| public static function iban($countryCode = null, $prefix = '', $length = null) | |
| { | |
| $countryCode = null === $countryCode ? self::randomKey(self::$ibanFormats) : strtoupper($countryCode); | |
| $format = !isset(static::$ibanFormats[$countryCode]) ? null : static::$ibanFormats[$countryCode]; | |
| if ($length === null) { | |
| if ($format === null) { | |
| $length = 24; | |
| } else { | |
| $length = 0; | |
| foreach ($format as $part) { | |
| [$class, $groupCount] = $part; | |
| $length += $groupCount; | |
| } | |
| } | |
| } | |
| if ($format === null) { | |
| $format = [['n', $length]]; | |
| } | |
| $expandedFormat = ''; | |
| foreach ($format as $item) { | |
| [$class, $length] = $item; | |
| $expandedFormat .= str_repeat($class, $length); | |
| } | |
| $result = $prefix; | |
| $expandedFormat = substr($expandedFormat, strlen($result)); | |
| foreach (str_split($expandedFormat) as $class) { | |
| switch ($class) { | |
| default: | |
| case 'c': | |
| $result .= Miscellaneous::boolean() ? static::randomDigit() : strtoupper(static::randomLetter()); | |
| break; | |
| case 'a': | |
| $result .= strtoupper(static::randomLetter()); | |
| break; | |
| case 'n': | |
| $result .= static::randomDigit(); | |
| break; | |
| } | |
| } | |
| $checksum = Iban::checksum($countryCode . '00' . $result); | |
| return $countryCode . $checksum . $result; | |
| } | |
| /** | |
| * Return the String of a SWIFT/BIC number | |
| * | |
| * @example 'RZTIAT22263' | |
| * | |
| * @see http://en.wikipedia.org/wiki/ISO_9362 | |
| * | |
| * @return string Swift/Bic number | |
| */ | |
| public static function swiftBicNumber() | |
| { | |
| return self::regexify('^([A-Z]){4}([A-Z]){2}([0-9A-Z]){2}([0-9A-Z]{3})?$'); | |
| } | |
| } | |
Xet Storage Details
- Size:
- 10.7 kB
- Xet hash:
- 8a9956a5d9ce7b2270fd115dad52b6bbf9810e0a51646ca54e19157476b316fb
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.