Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
2 / 2
CRAP
100.00% covered (success)
100.00%
15 / 15
BaseConverter
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
2 / 2
4
100.00% covered (success)
100.00%
15 / 15
 to10Base
100.00% covered (success)
100.00%
1 / 1
2
100.00% covered (success)
100.00%
6 / 6
 toBase
100.00% covered (success)
100.00%
1 / 1
2
100.00% covered (success)
100.00%
9 / 9
<?php
/**
 * BaseConverter.
 *
 * @author Frank Nägler <mail@naegler.net>
 *
 * @link https://github.com/NeoBlack/BaseConverter
 */
namespace NeoBlack\BaseConverter;
/**
 * Class BaseConverter
 *
 * @package NeoBlack\BaseConverter
 */
class BaseConverter
{
    /**
     * Base64 nach RFC 4648
     * @var string
     */
    const BASE64 = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_';
    /**
     * @var string
     */
    const BASE62 = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    /**
     * Base32 nach RFC 4648
     * @var string
     */
    const BASE32 = '0123456789ABCDEFGHIJKLMNOPQRSTUV';
    /**
     * Base16 nach RFC 4648
     * @var string
     */
    const BASE16 = '0123456789ABCDEF';
    /**
     * Convert from any base to base 10 .
     *
     * @param string $value
     * @param string $base
     *
     * @return int
     */
    public static function to10Base(string $value, string $base = self::BASE64): int
    {
        $baseLength = strlen($base);
        $valueLength = strlen($value);
        $result = strpos($base, $value[0]);
        for ($i = 1; $i < $valueLength; $i++) {
            $result = $baseLength * $result + strpos($base, $value[$i]);
        }
        return $result;
    }
    /**
     * Convert from base 10 to another base.
     *
     * @param int $value
     * @param string $base default static::BASE64
     *
     * @return string
     */
    public static function toBase(int $value, string $base = self::BASE64): string
    {
        $baseLength = strlen($base);
        $radix = $value  % $baseLength;
        $result = $base[$radix];
        $tmp = floor($value / $baseLength);
        while ($tmp) {
            $radix = $tmp % $baseLength;
            $tmp = floor($tmp / $baseLength);
            $result = $base[$radix] . $result;
        }
        return $result;
    }
}