代码之家  ›  专栏  ›  技术社区  ›  mrpatg

如何用PHP将数字转换为字母数字系统

php
  •  3
  • mrpatg  · 技术社区  · 15 年前

    我不知道这叫什么,这就是为什么我找不到它的原因。

    我要做的是把数字转换成字母数字,这样数字,比如5000,就不会读作“5000”,而是“G4U”,或者类似的东西。这样做的目的是节省空间,同时也不会使给定系统中有多少记录变得明显。我使用的是PHP,所以如果在PHP中内置类似的东西更好,但是在这一点上,这个方法的名称也会很有帮助。

    再次,很抱歉不能说得更清楚,我只是不知道这叫什么。

    5 回复  |  直到 10 年前
        1
  •  4
  •   Community CDub    8 年前

    有趣的是,我问 the exact opposite question 昨天。

    首先想到的是将十进制数转换为 hexadecimal . 5000个会变成 1388 ,10000成 2710 . 将在这里和那里保存几个字节。

    您还可以使用更高的基数,它使用完整的字母表(0-Z而不是0-F),甚至可以使用完整的256个ASCII字符。正如@yacoby指出的,您可以使用 base_convert() 为此。

    正如我在评论中所说,请记住,这不是一种有效的隐藏ID的方法。如果你有安全问题的时候,人们可以猜测下一个或上一个ID到一个记录,这是非常糟糕的保护。

        2
  •  7
  •   Yacoby    15 年前

    你想把数字的底数改成10以外的数字(我想你想要36为底数,因为它使用了整个字母表和数字0-9)。

    内置的 base_convert 函数可能有帮助,尽管它有限制,但它只能在2和36之间转换。

    $number = '5000';
    echo base_convert($number, 10, 36); //3uw
    
        3
  •  1
  •   JAL    15 年前

    dechex 将数字转换为十六进制。但是,它不会混淆给定系统中有多少记录。我认为它也不会使储存或节省空间变得更有效率。

    如果需要混淆,可能需要使用双向密码函数。这也不会节省空间。

    请更清楚地陈述你的目标,并提供更多的背景,因为这似乎有点毫无意义。

        4
  •  0
  •   High Performance Mark    15 年前

    这可能会使更多的人困惑,而不是简单地转换数字的基数…

    尝试使用带符号的数字来表示您的数字。例如,不使用数字0..9表示十进制数,而是使用数字-5..5。这个 Wikipedia article 给出了一个数字的二进制表示的例子,但是这种方法可以用于任何数字基。

    结合使用这一点,比如说,base-36算法可能会让您满意。

        5
  •  -1
  •   mqchen    15 年前

    编辑 :此答案实际上不是问题的解决方案,因此请忽略它,除非您试图散列一个数字。

    我的第一个想法是用eg散列它。 md5 sha1 . (你可能不会节省任何空间…)

    防止人们使用 rainbow-tables brute force 要猜测您散列的数字,可以始终添加 salt . 它可以像一个字符串一样简单,在对数字进行哈希运算之前先在数字前面加上一个字符串。

    MD5将返回一个正好32个字符的字母数字字符串,而sha1将返回一个精确的40个字符。

    推荐文章