购物网站的优惠码,网站邀请码那一类的唯一字符串是怎么实现的?


我想过用UUID,但是实在太长了。

希望产生的字符串有以下特点:
1.长度适当,不能太长;
2.猜不到,用暴力机也难猜到;
3.确定存在数据库中这一过程具有比较好的效率;
4.唯一,具备时效性;
5.最好从某个字符串中能得出一些信息,如产生该邀请码的用户ID。

有没有好的办法,或者相关资料?
谢谢啦~

加密解密 数据库 电商 算法 网站开发

iblise 10 years, 10 months ago

与其说长度不长 不如说价值不大 满1000减10快的优惠券暴力破解了也没意思
但是如果你试试1000元的代金券呢 不长是不可能的

受受天然呆 answered 10 years, 10 months ago

1和2其实在一定程度上是互斥的
3自增主键是最简单有效的
4这个和生成关系不大,在记录里保存生成时间就行了
5可以把ID明文组合到最终字符串里


楼主的这个问题我曾经仔细思考过,想要同时保证唯一性和不可猜解,最简单的思路:
1.使用一个每次生成时都不同的存在作为变量,如:时间戳,自增主键;
2.加入某些只有你知道的数据进行混淆,比如你学号的MD5值;
3.然后通过MD5,SHA1使之无法被还原,在处理后的结果中选取你要的长度作为唯一字符串;
这个思路的问题是MD5或者SHA1都可能发生碰撞,如果不进行检查的话可能出现重复。当然,可能这种碰撞造成的重复在你网站倒闭之前都不会发生。
复杂一点的思路:可以把MD5和SHA1替换成某种加密算法,如AES,DES,可以保证唯一性,代价是长度最少也会和所用加密算法的最小块一致。
总结:推荐简单思路

eamconn answered 10 years, 10 months ago

Your Answer