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

namespace FakerProvideren_GB;

class 
Company extends FakerProviderCompany
{
    public const 
VAT_PREFIX 'GB';
    public const 
VAT_TYPE_DEFAULT 'vat';
    public const 
VAT_TYPE_BRANCH 'branch';
    public const 
VAT_TYPE_GOVERNMENT 'gov';
    public const 
VAT_TYPE_HEALTH_AUTHORITY 'health';

    
/**
     * UK VAT number
     *
     * This method produces numbers that are _reasonably_ representative
     * of those issued by government
     *
     * @see https://en.wikipedia.org/wiki/VAT_identification_number#VAT_numbers_by_country
     */
    
public static function vat(string $type null): string
    
{
        switch (
$type) {
            case static::
VAT_TYPE_BRANCH:
                return static::
generateBranchTraderVatNumber();

            case static::
VAT_TYPE_GOVERNMENT:
                return static::
generateGovernmentVatNumber();

            case static::
VAT_TYPE_HEALTH_AUTHORITY:
                return static::
generateHealthAuthorityVatNumber();

            default:
                return static::
generateStandardVatNumber();
        }
    }

    
/**
     * Standard
     * 9 digits (block of 3, block of 4, block of 2)
     *
     * This uses the format introduced November 2009 onward where the first
     * block starts from 100 and the final two digits are generated via a the
     * modulus 9755 algorithm
     */
    
private static function generateStandardVatNumber(): string
    
{
        
$firstBlock = static::numberBetween(100999);
        
$secondBlock = static::randomNumber(4true);

        return 
sprintf(
            
'%s%d %d %d',
            static::
VAT_PREFIX,
            
$firstBlock,
            
$secondBlock,
            static::
calculateModulus97($firstBlock $secondBlock),
        );
    }

    
/**
     * Health authorities
     * the letters HA then 3 digits from 500 to 999 (e.g. GBHA599)
     */
    
private static function generateHealthAuthorityVatNumber(): string
    
{
        return 
sprintf(
            
'%sHA%d',
            static::
VAT_PREFIX,
            static::
numberBetween(500999),
        );
    }

    
/**
     * Branch traders
     * 12 digits (as for 9 digits, followed by a block of 3 digits)
     */
    
private static function generateBranchTraderVatNumber(): string
    
{
        return 
sprintf(
            
'%s %d',
            static::
generateStandardVatNumber(),
            static::
randomNumber(3true),
        );
    }

    
/**
     * Government departments
     * the letters GD then 3 digits from 000 to 499 (e.g. GBGD001)
     */
    
private static function generateGovernmentVatNumber(): string
    
{
        return 
sprintf(
            
'%sGD%s',
            static::
VAT_PREFIX,
            
str_pad((string) static::numberBetween(0499), 3'0'STR_PAD_LEFT),
        );
    }

    
/**
     * Apply a Modulus97 algorithm to an input
     *
     * @see https://library.croneri.co.uk/cch_uk/bvr/43-600
     */
    
public static function calculateModulus97(string $inputbool $use9755 true): string
    
{
        
$digits str_split($input);

        if (
count($digits) !== 7) {
            throw new 
InvalidArgumentException();
        }
        
$multiplier 8;
        
$sum 0;

        foreach (
$digits as $digit) {
            
$sum += (int) $digit $multiplier;
            --
$multiplier ;
        }

        if (
$use9755) {
            
$sum $sum 55;
        }

        while (
$sum 0) {
            
$sum -= 97;
        }
        
$sum $sum * -1;

        return 
str_pad((string) $sum2'0'STR_PAD_LEFT);
    }
}
Онлайн: 1
Реклама