note 104709 added to function.base-convert
| From: | fordiman at gmail dot com | Date: | Fri, 01 Jul 2011 23:26:24 +0000 |
| Subject: | note 104709 added to function.base-convert | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-181150@lists.php.net to get a copy of this message | ||
<?php
// Similar to Ruiz's RFC Base 32 class, but for Douglas Crockford's ambiguity-collapsing
version of the spec.
abstract class Crock32 {
static private $encodeMap = array(0,1,2,3,4,5,6,7,
8,9,'a','b','c','d','e','f',
'g','h','j','k','m','n','p','q',
'r','s','t','v','w','x','y','z'
);
static private $decodeMap =
array('l'=>1,'i'=>1,'o'=>0,'u'=>27);
static private function decodeMap($ch) {
if (empty(self::$decodeMap['a']))
forEach(self::$encodeMap as $i=>$v) self::$decodeMap[$v]=$i;
return self::$decodeMap[strToLower($ch)];
}
static private function bitsFromString($str) {
$bStr = array();
for ($i=0; $i<strlen($str); $i++)
$bStr[]= str_pad(base_convert(ord($str[$i]), 10, 2), 8, '0', STR_PAD_LEFT);
return join('', $bStr);
}
static private function b32FromBits($bits) {
$bStr = str_split($bits, 5);
$enc='';
for($i=0; $i<count($bStr); $i++)
$enc.=self::$encodeMap[base_convert(str_pad($bStr[$i],5,'0'),2,10)];
return $enc;
}
static private function bitsFromb32($str) {
$bStr=array();
for ($i=0; $i<strlen($str); $i++)
$bStr[]=str_pad(base_convert(self::decodeMap($str[$i]),10,2),5,'0',STR_PAD_LEFT);
return join('', $bStr);
}
static private function stringFromBits($bits) {
$bStr = str_split(substr($bits,0,floor(strlen($bits)/8)*8), 8);
$ret = '';
for ($i=0; $i<count($bStr); $i++) {
$b = $bStr[$i];
$o = base_convert($b, 2, 10);
$c = chr($o);
$ret.=$c;
}
return $ret;
}
static function encode($str) {
return self::b32FromBits(self::bitsFromString($str));
}
static function decode($enc) {
return self::stringFromBits(self::bitsFromb32($enc));
}
}
----
Server IP: 64.71.164.2
Probable Submitter: 69.253.206.106
----
Manual Page -- http://www.php.net/manual/en/function.base-convert.php
Edit -- https://master.php.net/note/edit/104709
Del: integrated -- https://master.php.net/note/delete/104709/integrated
Del: useless -- https://master.php.net/note/delete/104709/useless
Del: bad code -- https://master.php.net/note/delete/104709/bad+code
Del: spam -- https://master.php.net/note/delete/104709/spam
Del: non-english -- https://master.php.net/note/delete/104709/non-english
Del: in docs -- https://master.php.net/note/delete/104709/in+docs
Del: other reasons-- https://master.php.net/note/delete/104709
Reject -- https://master.php.net/note/reject/104709
Search -- https://master.php.net/manage/user-notes.php