phlib/base_convert
Drop-in replacement for PHP base_convert that supports arbitrarily large numbers without silent failures. Convert big numeric strings between bases (e.g., 10↔36) reliably via Phlib\base_convert, and round-trip large values correctly.
Installation:
composer require phlib/base_convert
Ensure your project uses PHP 7.4+ (required for this package).
First Usage:
Replace native base_convert() calls with the fully qualified namespace:
use function Phlib\base_convert;
// Example: Convert a large base-10 number to base-36
$largeNumber = '12345678901234567890';
$base36 = base_convert($largeNumber, 10, 36);
Verify Round-Trip:
$reconverted = base_convert($base36, 36, 10);
var_dump($largeNumber === $reconverted); // Should return `true`
InvalidArgumentException for invalid inputs).base_convert() fails silently.base_convert()base_convert() calls with the package’s version.// Before (fails for large numbers)
$result = base_convert($largeInput, 10, 36);
// After (works for large numbers)
$result = Phlib\base_convert($largeInput, 10, 36);
InvalidArgumentException.use function Phlib\base_convert;
function safeConvert(string $number, int $fromBase, int $toBase): string {
if (!ctype_alnum($number)) {
throw new \InvalidArgumentException("Input must be alphanumeric.");
}
return base_convert($number, $fromBase, $toBase);
}
Str::uuid() or custom slugs).$id = '1234567890abcdef1234567890abcdef';
$base36Id = base_convert($id, 10, 36); // Shorter, URL-friendly
$legacyData = '99999999999999999999'; // Stored as string to avoid overflow
$processed = base_convert($legacyData, 10, 16); // Convert to hex for storage
Service Provider Binding (Optional): Bind the function to Laravel’s container for dependency injection:
// app/Providers/AppServiceProvider.php
public function register() {
$this->app->bind('base_convert', function () {
return Phlib\base_convert(...);
});
}
Usage:
$result = app('base_convert')($number, $fromBase, $toBase);
Helper Function:
Add a global helper in app/Helpers/base_convert.php:
if (!function_exists('app_base_convert')) {
function app_base_convert(string $number, int $fromBase, int $toBase): string {
return Phlib\base_convert($number, $fromBase, $toBase);
}
}
Require it in composer.json autoload:
"autoload": {
"files": ["app/Helpers/base_convert.php"]
}
$chunkSize = 1000;
foreach (array_chunk($largeNumbers, $chunkSize) as $chunk) {
array_map(fn($n) => base_convert($n, 10, 36), $chunk);
}
use Phlib\base_convert;
use PHPUnit\Framework\TestCase;
class BaseConvertTest extends TestCase {
public function testLargeNumberConversion() {
$largeNumber = str_repeat('9', 50); // 50-digit number
$converted = base_convert($largeNumber, 10, 36);
$this->assertEquals($largeNumber, base_convert($converted, 36, 10));
}
}
base_convert() for small/medium numbers (should be similar).PHP Version Mismatch:
Class 'Phlib\base_convert' not found or TypeError on PHP <7.4.Silent Failures vs. Exceptions:
base_convert() fails silently for invalid inputs (e.g., non-alphanumeric strings). This package throws InvalidArgumentException.try {
$result = base_convert($input, 10, 36);
} catch (InvalidArgumentException $e) {
// Handle error (e.g., log, fallback, or rethrow)
}
Base Limitations:
if ($fromBase < 2 || $fromBase > 36 || $toBase < 2 || $toBase > 36) {
throw new \InvalidArgumentException("Bases must be between 2 and 36.");
}
Memory Issues:
Laravel Facade Conflicts:
use function base_convert, the package’s function may not override it due to function aliasing.Phlib\base_convert) or alias it in composer.json:
"extra": {
"aliases": {
"base_convert": "Phlib\\base_convert"
}
}
Validate Inputs:
if (!ctype_alnum($number)) {
throw new \InvalidArgumentException("Input must be alphanumeric.");
}
Check Base Ranges:
$fromBase and $toBase are between 2 and 36:
if ($fromBase < 2 || $fromBase > 36 || $toBase < 2 || $toBase > 36) {
throw new \InvalidArgumentException("Bases must be between 2 and 36.");
}
Round-Trip Testing:
$original = '12345678901234567890';
$converted = base_convert($original, 10, 36);
$reconverted = base_convert($converted, 36, 10);
assert($original === $reconverted, "Round-trip conversion failed!");
Log Large Conversions:
How can I help you explore Laravel packages today?