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

时间:2010-06-06 18:20:38

标签: php

我不确定这叫什么,这就是我在搜索时遇到的问题。

我想要做的是取数字并将它们转换为一些字母数字基数,这样数字(例如5000)就不会读作'5000'而是'G4u',或类似的东西。这个想法是为了节省空间,也没有明确给定系统中有多少记录。我正在使用php,所以如果有更好的内置这样的东西,甚至更好,但即使这个方法的名称在这一点上也会有所帮助。

再次,抱歉没有能够更清楚,我只是不确定这是什么。

5 个答案:

答案 0 :(得分:7)

您想要将数字的基数更改为基数10之外的其他内容(我认为您需要基数36,因为它使用整个字母和数字0 - 9)。

内置的base_convert函数可能会有所帮助,虽然它确实有限制但它只能在2到36之间转换

$number = '5000';
echo base_convert($number, 10, 36); //3uw

答案 1 :(得分:4)

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

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

您还可以使用更高的基础,使用完整的字母(0-Z而不是0-F),甚至是完整的256个ASCII字符。正如@Yacoby指出的那样,你可以使用base_convert()

正如我在评论中所说,请记住,这不是屏蔽ID的有效方法。如果您在人们可以猜到记录的下一个或上一个ID时遇到安全问题,则保护性很差。

答案 2 :(得分:1)

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

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

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

答案 3 :(得分:0)

这可能会比简单地转换数字基数更让人困惑......

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

与base-36算术一起使用可能会让你满意。

答案 4 :(得分:-1)

编辑:这个答案实际上不是问题的解决方案,所以请忽略它,除非您尝试哈希数字。

我首先想到的是用例如哈希来哈希。 md5sha1。 (你可能不会节省任何空间......)

为防止人们使用rainbow-tablesbrute force来猜测您的哈希值,您可以随时添加salt。在对数字进行哈希处理之前,它可以像数字前面的字符串一样简单。

md5将返回一个完全包含32个字符的字母数字字符串,而sha1将返回一个exaclty 40个字符。