我不确定这叫什么,这就是我在搜索时遇到的问题。
我想要做的是取数字并将它们转换为一些字母数字基数,这样数字(例如5000)就不会读作'5000'而是'G4u',或类似的东西。这个想法是为了节省空间,也没有明确给定系统中有多少记录。我正在使用php,所以如果有更好的内置这样的东西,甚至更好,但即使这个方法的名称在这一点上也会有所帮助。
再次,抱歉没有能够更清楚,我只是不确定这是什么。
答案 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)
编辑:这个答案实际上不是问题的解决方案,所以请忽略它,除非您尝试哈希数字。
我首先想到的是用例如哈希来哈希。 md5或sha1。 (你可能不会节省任何空间......)
为防止人们使用rainbow-tables或brute force来猜测您的哈希值,您可以随时添加salt。在对数字进行哈希处理之前,它可以像数字前面的字符串一样简单。
md5将返回一个完全包含32个字符的字母数字字符串,而sha1将返回一个exaclty 40个字符。