jimmerioles/bitcoin-currency-converter-php

View on GitHub
src/Util/CurrencyCodeChecker.php

Summary

Maintainability
A
3 hrs
Test Coverage
A
100%
<?php

declare(strict_types=1);

namespace Jimmerioles\BitcoinCurrencyConverter\Util;

class CurrencyCodeChecker
{
    /**
     * List of all fiat currencies.
     *
     * @var array<string>
     */
    protected array $fiatCurrencyCodes = [
        'AED',
        'AFN',
        'ALL',
        'AMD',
        'ANG',
        'AOA',
        'ARS',
        'AUD',
        'AWG',
        'AZN',
        'BAM',
        'BBD',
        'BDT',
        'BGN',
        'BHD',
        'BIF',
        'BMD',
        'BND',
        'BOB',
        'BOV',
        'BRL',
        'BSD',
        'BTN',
        'BWP',
        'BYN',
        'BZD',
        'CAD',
        'CDF',
        'CHE',
        'CHF',
        'CHW',
        'CLF',
        'CLP',
        'CNY',
        'COP',
        'COU',
        'CRC',
        'CUC',
        'CUP',
        'CVE',
        'CZK',
        'DJF',
        'DKK',
        'DOP',
        'DZD',
        'EGP',
        'ERN',
        'ETB',
        'EUR',
        'FJD',
        'FKP',
        'GBP',
        'GEL',
        'GHS',
        'GIP',
        'GMD',
        'GNF',
        'GTQ',
        'GYD',
        'HKD',
        'HNL',
        'HRK',
        'HTG',
        'HUF',
        'IDR',
        'ILS',
        'INR',
        'IQD',
        'IRR',
        'ISK',
        'JMD',
        'JOD',
        'JPY',
        'KES',
        'KGS',
        'KHR',
        'KMF',
        'KPW',
        'KRW',
        'KWD',
        'KYD',
        'KZT',
        'LAK',
        'LBP',
        'LKR',
        'LRD',
        'LSL',
        'LYD',
        'MAD',
        'MDL',
        'MGA',
        'MKD',
        'MMK',
        'MNT',
        'MOP',
        'MRO',
        'MUR',
        'MVR',
        'MWK',
        'MXN',
        'MXV',
        'MYR',
        'MZN',
        'NAD',
        'NGN',
        'NIO',
        'NOK',
        'NPR',
        'NZD',
        'OMR',
        'PAB',
        'PEN',
        'PGK',
        'PHP',
        'PKR',
        'PLN',
        'PYG',
        'QAR',
        'RON',
        'RSD',
        'RUB',
        'RWF',
        'SAR',
        'SBD',
        'SCR',
        'SDG',
        'SEK',
        'SGD',
        'SHP',
        'SLL',
        'SOS',
        'SRD',
        'SSP',
        'STD',
        'SVC',
        'SYP',
        'SZL',
        'THB',
        'TJS',
        'TMT',
        'TND',
        'TOP',
        'TRY',
        'TTD',
        'TWD',
        'TZS',
        'UAH',
        'UGX',
        'USD',
        'USN',
        'UYI',
        'UYU',
        'UZS',
        'VEF',
        'VND',
        'VUV',
        'WST',
        'YER',
        'ZAR',
        'ZMW',
        'ZWL',
        'CNH',
        'CNT',
        'GGP',
        'IMP',
        'JEP',
        'KID',
        'NIS',
        'NTD',
        'PRB',
        'SLS',
        'TVD'
    ];

    /**
     * List of all crypto currencies.
     *
     * @var array<string>
     */
    protected array $cryptoCurrencyCodes = [
        'AUR',
        'BIS',
        'BTC',
        'XBT',
        'BCH',
        'BCC',
        'BC',
        'BURST',
        'DASH',
        'DOGE',
        'XDG',
        'XDN',
        'EMC',
        'ETH',
        'ETC',
        'GRC',
        'IOT',
        'MIOTA',
        'LTC',
        'MZC',
        'XMR',
        'NMC',
        'XEM',
        'NXT',
        'MSC',
        'PPC',
        'POT',
        'XPM',
        'XRP',
        'SIL',
        'STC',
        'AMP',
        'TIT',
        'UBQ',
        'VTC',
        'ZEC',
        'XBC',
        'XLM',
        'XZC',
        'NEO',
        'LSK',
        'STRAT',
        'WAVES',
        'BCN',
        'HSR',
        'BTS',
        'STEEM',
        'KMD',
        'ARK',
        'FCT',
        'SC',
        'GBYTE',
        'PIVX',
        'DCR',
        'DGB',
        'NXS',
        'BTCD',
        'GAME',
        'SYS',
        'BLOCK',
        'XVG',
        'NAV',
        'LKK',
        'UBQ',
        'PART',
        'NLC2',
        'GXS',
        'NLG',
        'DCT',
        'FRST',
        'RISE',
        'EMC',
        'LEO',
        'XEL',
        'IOC',
        'XAS',
        'ADK',
        'PPC',
        'RDD',
        'WTC',
        'FAIR',
        'VTC',
        'XCP',
        'VIA',
        'ETP',
        'MONA',
        'EXP',
        'CLOACK',
        'OK',
        'ION',
        'SIB',
        'TCC',
        'EB3',
        'LBC',
        'RADS',
        'BAY',
        'CRW',
        'POT',
        'CLAM',
        'PPY',
        'SKY',
        'ZEN',
        'UNO',
        'MUE',
        'SHIFT',
        'BLK',
        'SPR',
        'SLS',
        'GOLOS',
        'OMNI',
        'YBC',
        'ENRG',
        'MOON',
        'RBY',
        'VRC',
        'XRB',
        'ECN',
        'DMD',
        'EDR'
    ];

    /**
     * Check if crypto currency.
     */
    public function isCryptoCurrency(string $currencyCode): bool
    {
        return in_array(strtoupper($currencyCode), $this->cryptoCurrencyCodes, true);
    }

    /**
     * Check if fiat currency.
     */
    public function isFiatCurrency(string $currencyCode): bool
    {
        return in_array(strtoupper($currencyCode), $this->fiatCurrencyCodes, true);
    }

    /**
     * Check if currency code.
     */
    public function isCurrencyCode(string $currencyCode): bool
    {
        if ($this->isFiatCurrency($currencyCode)) {
            return true;
        }

        return $this->isCryptoCurrency($currencyCode);
    }
}