相关疑难解决方法(0)

隐藏/加密订单号作为另一个数字:对称,"随机"外观?

客户有一个简单的增加订单号(1,2,3 ......).他希望最终用户收到8位或9位数字(仅数字 - 无字符)"随机"数字.显然,这个"随机"数字实际上必须是唯一且可逆的(它实际上是对actualOrderNumber的加密).

我的第一个想法是只是洗牌一些.当我向客户展示一个样本序列时,他抱怨随后的obfuscOrderNumbers正在增加,直到它们达到"shuffle"点(低位比特发挥作用的点).他希望obfuscOrderNumbers尽可能随机看似.

我的下一个想法是确定性地播种线性同余伪随机数生成器,然后获取actualOrderNumber值.但在这种情况下,我需要担心碰撞 - 客户想要一种保证不会在至少10 ^ 7个周期内发生碰撞的算法.

我的第三个想法是"呃,只是对加密的东西进行加密",但如果我使用股票加密库,我必须对其进行后期处理才能获得8位或9位数的要求.

我的第四个想法是将actualOrderNumber的位解释为格雷编码的整数并返回.

我的第五个问题是:"我可能会过度思考这个问题.我敢打赌,StackOverflow上的某个人可以用几行代码完成这项工作."

random encryption encoding numbers

26
推荐指数
3
解决办法
6025
查看次数

Django,访问 PostgreSQL 序列

在 Django 应用程序中,我需要创建一个订单号,如下所示:yyyymmddnnnn,其中 yyyy=年,mm=月,dd=日,nnnn 是 1 到 9999 之间的数字。

我想我可以使用 PostgreSQL 序列,因为生成的数字是原子的,所以我可以确定当进程获取一个数字时,该数字是唯一的。

所以我创建了一个 PostgreSQL 序列:

CREATE SEQUENCE order_number_seq
INCREMENT 1
MINVALUE 1
MAXVALUE 9999
START 1
CACHE 1
CYCLE;
Run Code Online (Sandbox Code Playgroud)

该序列可以作为具有一行的表来访问。因此,在文件 checkout.py 中,我创建了一个 Django 模型来访问此序列。

class OrderNumberSeq(models.Model):
    """
    This class maps to OrderNumberSeq which is a PostgreSQL sequence.
    This sequence runs from 1 to 9999 after which it restarts (cycles) at 1.
    A sequence is basically a special single row table.
    """
    sequence_name = models.CharField(max_length=128, primary_key=True)
    last_value = models.IntegerField()
    increment_by = …
Run Code Online (Sandbox Code Playgroud)

django postgresql django-models

6
推荐指数
1
解决办法
1万
查看次数