سؤال

هل يمكن أن تخبرني كيف وظيفة عكس وظيفة PHP التالية؟

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

شكرا جزيلا لك مقدما!

هل كانت مفيدة؟

المحلول

هذا آمن :) أخذني بضع دقائق لكسرها. ها أنت ذا،

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

نصائح أخرى

لم يختبر هذا الرمز، لكنه قد يعمل:

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

`

هل تسأل كيفية تحويل قاعدة 38 إلى قاعدة 10؟ الخوارزمية العددية هي:

  1. دع N يكون الرقم الجديد في Base 10. قم بتعيين N إلى الصفر للبدء ب.
  2. دع X يكون الرقم الأصلي في قاعدة 38.
  3. اضرب ن 38.
  4. دع D يكون الرقم الأكثر أهمية (أقصى اليسار) من X.
  5. دعونا تكون قيمة D في قاعدة 10.
  6. أضف ر إلى N.
  7. إزالة D من x (لذلك الرقم x هو الآن 1 أرقام أقصر).
  8. إذا كانت x فارغة، فتح 10.
  9. غوتو 3.
  10. ارجع n، وهو الآن عدد الأساس 10 المحول بالكامل.

الآن بعد أن تفهم الرياضيات، يجب أن تكون واضحة إلى حد ما لتحويل هذه الخطوات إلى وظيفة PHP.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top