| 
<?php/**
 * BaseConverter.
 *
 * @author Frank Nägler <[email protected]>
 *
 * @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;
 }
 }
 
 |