gpt4 book ai didi

php - 如何使用实际订单 ID 生成唯一订单 ID(只是为了向用户显示)?

转载 作者:可可西里 更新时间:2023-11-01 12:44:03 25 4
gpt4 key购买 nike

再次编辑:我不想提出另一个问题,所以在这里提问。我有同样的情况。但是这次我需要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,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 是什么。

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,它将是唯一的)

这不应该用作密码加密/解密例程 - 不要存储密码,存储哈希值。

确保您的 key 是随机的、复杂的并且您的$scramble 变量中的字符。

它只混淆了 order_id。

编辑:

尽管填充输入字符串 (order_id) 会产生一定程度的随机性,但您可以将其与@biakaveron 的答案结合起来创建类似 http://myapp.example.com/order/view/5cc46aea44e898c3b4e1303eb18d8161302cd367/2UD5UIK9S 的 URL

关于php - 如何使用实际订单 ID 生成唯一订单 ID(只是为了向用户显示)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5387755/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com