xavierfaucon/bravoids

将ID(十进制)转换为Hashids(50进制或62进制)

0.1.0 2015-02-02 14:59 UTC

This package is not auto-updated.

Last update: 2024-10-02 07:44:39 UTC


README

将ID(十进制)转换为哈希ID(50进制或62进制)。

BravoIDs类提供了两种方法:BravoIDs::encrypt和BravoIDs::decrypt。

BravoIDs::encrypt

描述

<?php
/**
 *
 * @param int $number The ID you want to convert into a hash
 * @param string $passPhrase  A passphrase that you must provide
 * @param int $minHashLength Specify the minimum length for the output.
 * @param bool $safeCharacters Remove all the vowels to generate the output to avoid curse words
 *
 * @return string The hash of a converted ID.
 */
BravoIDs::encrypt($number, $passPhrase, $minHashLength = 0, $safeCharacters = true);
?>

BravoIDs::encrypt

描述

<?php

 BravoIDs::decrypt(string $hash, string $passPhrase, int $minHashLength = 0, bool $safeCharacters = true);
 
?>

从哈希中返回一个ID。

参数

  • $hash : 您想转换成ID的哈希
  • $passPhrase : 您必须提供的密码短语
  • $minHashLength (可选 - 默认为0) : 指定输出最小长度。
  • $safeCharacters (可选 - 默认为true) : 删除所有元音以生成输出以避免脏话

注意:为了解密哈希,您必须指定与BravoID::encrypt相同的$passPhrase、$minHashLength和$safeCharacters变量。

基本用法

简单地生成ID

<?php

echo BravoIDs::encrypt (123, 'myPassPhrase');
// "tr"

echo BravoIDs::decrypt ('tr', 'myPassPhrase');
// "123"

?>

高级用法

增加哈希长度

<?php

echo BravoIDs::encrypt (123, 'myPassPhrase', 4);
// "kNtr"

echo BravoIDs::decrypt ('kNtr', 'myPassPhrase', 4);
// "123"

?>

注意:如果您使用32位PHP构建,则无法设置$minHashLengh > 5。这在限制部分中解释。

允许所有字符(包括元音,可能会出现脏话)

<?php

echo BravoIDs::encrypt (123, 'myPassPhrase', 4, false);
// "5u59"

echo BravoIDs::decrypt ('5u59', 'myPassPhrase', 4, false);
// "123"

?>

限制

根据您的PHP构建,您将受到限制

  • 32位PHP构建:整数可以是-2147483648到2147483647
  • 64位PHP构建:整数可以是-9223372036854775808到9223372036854775807

我没有在64位PHP构建上运行测试。

在32位上,这种限制意味着您只能转换到2 147 483 647个ID,不能再多了。

此外,当您使用变量$minHashLength时,您将减少可用的ID数量。

进行计算以找到您的数字应具有的最低值,以达到所需的HashLength)

例如,要获取至少X个字符的哈希,您需要number >= base * (X - 1)

其中base是用于转换您的数字的字符数(base50与$safeCharacters = true和base62与$safeCharacters = false)。

一旦我们知道这个最低值是多少,所有的ID都将“缩放”到那个值,'0'将变成6 250 000(base50和$minHashLength = 4)。

在这种情况下,这会使得2 147 483 647的值减少6 250 000(从'0'到'6 249 999')。

感谢

感谢ivanakimov和https://github.com/ivanakimov/hashids.php,我从那里借用了_consistent_shuffle方法。

感谢Kevin van Zonneveld,他写了这篇文章,我从那里获得了删除元音以获得安全单词的想法:http://kvz.io/blog/2009/06/10/create-short-ids-with-php-like-youtube-or-tinyurl/

BravoID是以这篇文章上提供的函数命名的,该函数曾被称为AlphaID :-)