code.fastix.org

Dateiansicht:

Datei:Projekte -> PHP:Umrechnung zwischen Zahlensystemen -> numberSystem.php
md5:9047af21b263b9ca8b3e836296b0eeeb
sha1:11744b3226a855de9ea271e9fd0a35d35d050358
  1. <?php
  2. /**
  3. * @author: Jörg Reinholz, fastix WebDesign & Consult, Kassel - http://www.fastix.org/
  4. * @version: 1.0.4
  5. * @licence: https://code.fastix.org/lizenz.php
  6. **/
  7.  
  8. class numberSystem
  9. {
  10.     protected $arChars = false;
  11.     protected $hash = false;
  12.  
  13.     function __construct($var='niceReadable32') {
  14.         switch (true) {
  15.             case ( is_array($var) ):
  16.                 return setChars( $var );
  17.             case ( 'bin' == $var || 'binär' == $var ):
  18.                 $this -> setChars (  array('0','1') );
  19.                 break;
  20.             case ( 'alphabet' == $var || 'alpha' == $var ):
  21.                 $this -> setChars ('0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ');
  22.                 break;
  23.             case ( 'ascii_33_126' == $var || 'ascii_visible' == $var ):
  24.                 $ar = array();
  25.                 for ($i=33; $i<127; $i++) { $ar[] = chr($i); }
  26.                 $this -> setChars($ar);
  27.                 break;
  28.             case( 'niceReadable32' == $var ):
  29.                 $this -> setChars ( array('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','J','K','L','M','N','P','R','S','T','U','V','W','X','Y','Z') );
  30.                 break;
  31.             case( 'decObusfacted' == $var || 'wuerfel' == $var ):
  32.                 $this -> setChars ( array('0','9','8','7','1','2','3','5','4','6') );
  33.                 break;
  34.             default:
  35.                 $this -> setChars ( $var );
  36.                 break;
  37.         }
  38.         return true;
  39.     }
  40.  
  41.     public function getChars() {
  42.         return $this -> arChars;
  43.     }
  44.  
  45.     public function getHash() {
  46.         return $this -> hash;
  47.     }
  48.  
  49.     public function setChars($arr) {
  50.         if (! is_array( $arr ) ) {
  51.             $arr = preg_split('//u', $arr, -1, PREG_SPLIT_NO_EMPTY);
  52.         }
  53.         if (2 <= count($arr) ) {
  54.             $test = array_unique($arr);
  55.             if ( $test == $arr) {
  56.                 $this -> arChars = $arr;
  57.                 $this -> hash = $this -> mkHash($arr);
  58.                 return count($arr);
  59.             } else {
  60.                 trigger_error ( 'class: numberSystem, function: setChars :: Der übergebene Array ist nicht unique', E_USER_ERROR );
  61.             }
  62.         } else {
  63.             trigger_error ( 'class: numberSystem, function: setChars :: Es wurde kein Array übergeben oder der Array hat weniger als zwei Elemente', E_USER_ERROR );
  64.         }
  65.         return false;
  66.     }
  67.  
  68.     private function mkHash( $arr ) {
  69.         $i=0;
  70.         foreach ( $arr as $element ) {
  71.             $hash[$element] = $i++;
  72.         }
  73.         return $hash;
  74.     }
  75.  
  76.     public function getDec( $str ) {
  77.         $number = 0;
  78.         $length = strlen($str);
  79.         for ( $i = $length; $i > 0; $i-- ) {
  80.             $inv  = $length - ( $i );
  81.             $char = $str{( $i-1 )};
  82.             if ( ! isset ( $this -> hash[$char] ) ) {
  83.                 trigger_error ( 'class: numberSystem, function: getNumberFromString :: Das Zeichen "'.$char.'" ist in der verwendeten Symboltabelle nicht enthalten', E_USER_ERROR );
  84.                 return false;
  85.             }
  86.             $number = $number +  pow( count($this -> hash), $inv ) * ( $this -> hash[$char] );
  87.         }
  88.         return $number;
  89.     }
  90.  
  91.     function getString( $int ) {
  92.         # gibt die Zahl aus dem beliebigen Zahlensystem (String)  zurück
  93.        if ( $int > PHP_INT_MAX ) {
  94.             trigger_error ( 'class: numberSystem, function: getString :: Es wurde eine zu große Zahl ('.$int.') übergeben. Maximum ist '. PHP_INT_MAX , E_USER_ERROR );
  95.         }
  96.         if ( 0 == $int ) {
  97.             return $this -> arChars[$int];
  98.         }
  99.         $length    = count($this -> arChars);
  100.         $str       = '';
  101.         $positions = 0;
  102.         while ( pow( $length, $positions ) <= $int ) {
  103.                 $positions++;
  104.         }
  105.         for ($i = $positions; $i > 0; $i-- ) {
  106.                 $potenz = pow( $length, $i-1 );
  107.                 $pos = floor( $int / $potenz );
  108.                 $int = $int % $potenz;
  109.                 $str = $str . $this -> arChars[$pos];
  110.         }
  111.         return $str;
  112.     }
  113. }