Вход Регистрация
Файл: vendor/fakerphp/faker/src/Faker/Provider/Payment.php
Строк: 336
<?php

namespace FakerProvider;

use 
FakerCalculatorIban;
use 
FakerCalculatorLuhn;

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($number04);
            
$p2 substr($number44);
            
$p3 substr($number84);
            
$p4 substr($number12);
            
$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($expandedFormatstrlen($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})?$');
    }
}
Онлайн: 0
Реклама