如何使用实际订单ID生成唯一订单ID(仅向用户显示)?
我有下表。
CREATE TABLE IF NOT EXISTS `j741_order` ( `order_id` int(11) NOT NULL AUTO_INCREMENT,
`buyer_id` int(11) NOT NULL,
`subtotal` decimal(15,5) DEFAULT '0.00000',
`discount` decimal(15,5) NOT NULL DEFAULT '0.00000',
`shipping` decimal(15,5) DEFAULT '0.00000',
`tax` decimal(15,5) DEFAULT '0.00000',
`total` decimal(15,5) NOT NULL DEFAULT '0.00000',
`currency` char(3) DEFAULT NULL,
`status` int(11) NOT NULL DEFAULT '0',
`created_date` datetime NOT NULL,
`modified_date` datetime NOT NULL,
PRIMARY KEY (`order_id`),
KEY `idx_buyer_id` (`buyer_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
我想生成一个唯一的订单ID(仅向用户显示),以便用户无法猜测下一个订单ID。
如何从原始订单中获取唯一随机订单ID,如果
并从该随机订单ID中获取原始订单ID?
编辑:
回答:
如果您的要求是:
- 它必须是可逆的(即 给出“随机” ID,您就可以找到原始的order_id)
- 没有多余的列
- 您根本不想向用户显示原始/内部order_id
那么我会建议某种双向加密。散列无法正常工作,因为您无法从散列中找到原始值。
我还要补充一点,它应该对人类友好,例如有人可以通过电话将其呼唤给您
我将使用一个位于此处的非常简单的双向加密类,该类由Tony
Marston编写。
我们希望该解决方案对人类友好,因此让我们删除一些混乱字符。我只剩下大写字母,数字,空格和破折号。使用标准的语音字母可以很容易地传达所有这些信息,并且大写字母的强制使用消除了关于字符是什么的任何混淆。
这些是我使用的加扰字符串(我使用此在线单词加扰器,而不是自己尝试加扰字符串):
$this->scramble1 = '0123456789-ABCDEFGHIJKLMNOPQRSTUVWXYZ '; $this->scramble2 = 'UKAH652LMOQ FBDIEG03JT17N4C89XPV-WRSYZ';
因此,创建我们人类友好的订单ID的代码为:
<?phpinclude 'encryption_class.php';
$crypt = new encryption_class();
$key = "A-COMPLETELY-RANDOM-KEY-THAT-I-HAVE-USED";
// Min length of 8 for encrypted string
$min_length = 8;
$order_id = 123456789;
print "Original: " . $order_id . PHP_EOL;
$encrypt_result = $crypt->encrypt($key, $order_id, $min_length);
print "Encrypted: " . $encrypt_result . PHP_EOL;
// DECRYPT
$decrypt_result = $crypt->decrypt($key, $encrypt_result);
print "Decrypted: " . $decrypt_result . PHP_EOL;
?>
(您需要下载 encryption_class 文件在本地并将其包含在内)。
我从命令行运行了该代码,并收到以下输出:
Original: 123456789Encrypted: 2UD5UIK9S
Decrypted: 123456789
现在,我们有了一个简短的,对人类友好的order_id,可以在诸如http://myapp.example.com/order/view/2UD5UIK9S之类的URL中使用它,而您无需将内部的order_id显示或传达给用户。
一旦您的order_id是唯一的,加密的代码就会是唯一的(因为它是PK,所以会是唯一的)
不应将其用作密码加密/解密例程-不要存储密码,存储哈希。
确保您的密钥是随机的,复杂的,并且 仅 包含$ scramble变量中的字符。
它仅混淆order_id。
尽管对输入字符串(order_id)进行填充会产生一定程度的随机性,但您可以将其与@biakaveron的答案结合起来以创建类似http://myapp.example.com/order/view/5cc46aea44e898c3b4e1303eb18d8161302cd367/2UD5UIK9S的URL
以上是 如何使用实际订单ID生成唯一订单ID(仅向用户显示)? 的全部内容, 来源链接: utcz.com/qa/426412.html