Pregunta

¿Me puede decir cómo la función invertido para la siguiente función de PHP es?

<?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);
?>

Muchas gracias de antemano!

¿Fue útil?

Solución

Esto es seguro :) Me tomó unos minutos para descifrarlo. Aquí tienes,

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;
}

Otros consejos

No he probado este código, pero podría funcionar:

<?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;
} ?>

`

¿Estás preguntando cómo convertir de base 38 a la base 10? El algoritmo numérico es la siguiente:

  1. Sea N el nuevo número en base 10. Conjunto N a cero para empezar.
  2. Sea X el número original en base 38.
  3. Multiply N por 38.
  4. Sea D el dígito más significativo de X (más a la izquierda).
  5. Sea T el valor de D en base 10.
  6. Añadir a T N.
  7. Eliminar D de X (por lo que el número de X es ahora 1 dígitos más corto).
  8. Si X está vacío, valla a 10.
  9. Goto 3.
  10. Vuelta N, que ahora es el totalmente convertida número de base 10.

Ahora que usted entiende las matemáticas, debería ser bastante sencillo para convertir estos pasos para una función de PHP.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top