Created
June 9, 2009 23:06
-
-
Save jsjohnst/126883 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
class base58 | |
{ | |
static public $alphabet = "123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ"; | |
public static function encode($int) { | |
$base58_string = ""; | |
$base = strlen(self::$alphabet); | |
while($int >= $base) { | |
$div = floor($int / $base); | |
$mod = ($int - ($base * $div)); // php's % is broke with >32bit int on 32bit proc | |
$base58_string = self::$alphabet{$mod} . $base58_string; | |
$int = $div; | |
} | |
if($int) $base58_string = self::$alphabet{$int} . $base58_string; | |
return $base58_string; | |
} | |
public static function decode($base58) { | |
$int_val = 0; | |
for($i=strlen($base58)-1,$j=1,$base=strlen(self::$alphabet);$i>=0;$i--,$j*=$base) { | |
$int_val += $j * strpos(self::$alphabet, $base58{$i}); | |
} | |
return $int_val; | |
} | |
} | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
include("base58.php"); | |
echo "http://flic.kr/p/" . base58::encode(3392387861) . "\n"; | |
// outputs: http://flic.kr/p/6aLSHT | |
echo "3392387861 = " . base58::decode(base58::encode(3392387861)) . "\n"; | |
// outputs: 3392387861 = 3392387861 |
I get this error String offset cast occurred
in line:
$base58_string = self::$alphabet{$mod} . $base58_string;
becuase $mod
is a float
. The error seem to be fixed casting to integer.
I was getting the offset cast warning too. I figure in 2017 the 32bit proc concern was not relevant, so using % and intval() cured those warnings.
<?php
class base58
{
static public $alphabet = "123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ";
public static function encode($int) {
$base58_string = "";
$base = strlen(self::$alphabet);
while($int >= $base) {
$div = floor($int / $base);
$mod = $int % $base;
$base58_string = self::$alphabet{$mod} . $base58_string;
$int = $div;
}
if($int) $base58_string = self::$alphabet{intval($int)} . $base58_string;
return $base58_string;
}
public static function decode($base58) {
$int_val = 0;
for($i=strlen($base58)-1,$j=1,$base=strlen(self::$alphabet);$i>=0;$i--,$j*=$base) {
$int_val += $j * strpos(self::$alphabet, $base58{$i});
}
return $int_val;
}
}
?>
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Is there a way to use this with raw binary data, instead of integers?