php – 如何使用实际订单ID生成唯一订单ID(仅显示touser)?

前端之家收集整理的这篇文章主要介绍了php – 如何使用实际订单ID生成唯一订单ID(仅显示touser)?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
再次编辑:我不想再创建另一个问题,所以问这里.我有同样的情况.但是这次我需要C语言的算法.有谁能够帮我.

我有下表.

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,`tax` decimal(15,`total` decimal(15,`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.

How can I get that Unique Random Order
Id from original Order If

and get back original order Id from
that Random Order Id?

编辑:我不想创建任何其他字段.

如果您的要求是:

>它必须是可逆的(即只给出“随机”ID,你可以找到原始的order_id)
>没有额外的列
>您根本不想向用户显示原始/内部order_id

那我建议采用某种双向加密方式.哈希不会起作用,因为您无法从哈希中找到原始值.

我还补充说它应该是人性化的,例如:有人可以通过电话给你打电话

我将使用一个非常简单的双向加密类,位于here,由Tony Marston编写.

我们希望解决方案是人性化的,所以让我们删除一些争夺字符.我只留下了大写字母,数字以及空格和短划线符号.所有这些都可以使用标准的语音字母轻松传达,强制使用大写可以消除任何关于角色是什么的混淆.

这些是我使用的争夺字符串(我使用this online word scrambler而不是尝试自己争夺字符串):

$this->scramble1 = '0123456789-ABCDEFGHIJKLMNOPQRSTUVWXYZ ';
    $this->scramble2 = 'UKAH652LMOQ FBDIEG03JT17N4C89XPV-WRSYZ';

因此,创建我们的人性化订单ID的代码是:

<?PHP

include '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: 123456789
Encrypted: 2UD5UIK9S
Decrypted: 123456789

现在我们有一个简短的,人性化的order_id,可以在诸如http://myapp.example.com/order/view/2UD5UIK9S之类的URL中使用,您永远不需要向用户显示或传达内部order_id.

笔记:

一旦您的order_id是唯一的,加密代码将是唯一的(因为它将是PK)

这不应该用作密码加密/解密例程 – 不存储密码,存储哈希值.

确保您的密钥是随机的,复杂的,并且只包含$scramble变量中的字符.

它仅对order_id进行模糊处理.

编辑:

虽然填充输入字符串(order_id)会产生一定程度的ramdomness,但您可以将其与@ biakaveron的答案结合起来创建一个像http://myapp.example.com/order/view/5cc46aea44e898c3b4e1303eb18d8161302cd367/2UD5UIK9S这样的URL

猜你在找的PHP相关文章