2 回答

TA貢獻(xiàn)1820條經(jīng)驗(yàn) 獲得超2個(gè)贊
我認(rèn)為您的第一個(gè)要求(不將每個(gè)促銷代碼保存在數(shù)據(jù)庫(kù)中)是有問(wèn)題的。
那么問(wèn)題來(lái)了,同一個(gè)優(yōu)惠碼可以多次兌換嗎?
如果這是不允許的,那么您無(wú)論如何都必須將已經(jīng)兌換的代碼存儲(chǔ)在某個(gè)持久數(shù)據(jù)存儲(chǔ)中,那么為什么不從一開始就將生成的代碼以及指示它是否已兌換的標(biāo)志存儲(chǔ)在持久數(shù)據(jù)存儲(chǔ)中呢?
如果您不想存儲(chǔ)所有代碼/無(wú)法存儲(chǔ)所有代碼,您仍然可以使用Random帶有當(dāng)前廣告系列獨(dú)有的種子的 a :
long seed = 20190921065347L; // identifies your current campaign
Random r = new Random(seed);
for (int i = 0; i < numCodes; i++) {
System.out.println(r.nextLong());
}
或者
long seed = 20190921065347L; // identifies your current campaign
Random r = new Random(seed);
r.longs(numCodes, 100_000_000_000_000L, 1_000_000_000_000_000L)
.forEach(System.out::println);
要確定代碼是否有效,您可以再次生成相同的代碼:
long seed = 20190921065347L; // identifies your current campaign
Random r = new Random(seed);
System.out.println(
r.longs(numCodes, 100_000_000_000_000L, 1_000_000_000_000_000L)
.anyMatch(l -> l == 350160558695557L));

TA貢獻(xiàn)1795條經(jīng)驗(yàn) 獲得超7個(gè)贊
像這樣的東西會(huì)起作用嗎?
Random r = new Random();
long start = 1_000_000_000;
long end = 10_000_000_000L;
long n = r.longs(1, start, end).reduce(0, (a, b) -> b);
String s = String.format("%,d", n).replace(",", "-");
System.out.println(s);
添加回答
舉報(bào)