Frage

Können Sie mir sagen, wie die Invert-Funktion für die folgende PHP-Funktion ist?

<?php
function id2secure($old_number) {
    $alphabet_en = '1357902468acegikmoqsuwybdfhjlnprtvxz-_';
    $new_number = '';
    while ($old_number > 0) {
        $rest = $old_number%38;
        if ($rest >= 38) { return FALSE; }
        $new_number .= $alphabet_en[$rest];
        $old_number = floor($old_number/38);
    }
    $new_number = strrev($new_number);
    return $new_number;
}
echo id2secure(172293);
?>

Vielen Dank im Voraus!

War es hilfreich?

Lösung

Das ist sicher :) dauerte ein paar Minuten, um es zu knacken. Hier,

function secure2id($new_number) {
        $alphabet_en = '1357902468acegikmoqsuwybdfhjlnprtvxz';
        $old_number = 0;
        $new_number = strrev($new_number);
        $len=strlen($new_number);
        $n=0;
        $base=1;
        while($n<$len){
            $c=$new_number[$n];
            $index = strpos($alphabet_en, $c);
            if ($index === false)
                 break;
            $old_number += $base * $index;
            $base *= 38;
            $n++;
        }
        return $old_number;
}

Andere Tipps

Haben Sie diesen Code nicht getestet, aber es könnte funktionieren:

<?php function secure2id($sr)
{
  $s = strrev($sr);
  $alpha = '1357902468acegikmoqsuwybdfhjlnprtvxz';
  $alpha2num = array();
  $n = strlen($alpha);
  for($i = 0; $i < $n; $i++)
  {
    $alpha2num[$alpha[$i]] = $i;
  }
  $rez = 0;
  $n = strlen($s);
  $b = 1;
  for($i = 0; $i < $n; $i++)
  {
    $rez += $b * $alpha2num[$s[$i]];
    $b *= 38;
  }
  return $rez;
} ?>

`

Sind Sie fragen, wie Basis 38 zu konvertieren 10 zu stützen? Der numerische Algorithmus ist dies:

  1. N sei die neue Zahl in der Basis 10 Sets N auf Null zu beginnen.
  2. Es sei X die ursprüngliche Zahl in der Basis 38 sein.
  3. Multiply N um 38.
  4. D sei die bedeutendste (ganz links) Ziffer X sein.
  5. Es sei T in der Basis 10 der Wert von D sein.
  6. T In dem N.
  7. Entfernen D von X (also die Zahl X ist jetzt 1 Stelle kürzer).
  8. Wenn X leer ist, gehe zu 10.
  9. Goto 3.
  10. Zurück N, das ist jetzt die vollständig umge Basis 10 Nummer.

Nun, da Sie die Mathematik zu verstehen, sollte es recht einfach sein, diese Schritte zu einer PHP-Funktion zu konvertieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top