簡體   English   中英

使用字母和數字生成序列號

[英]Generate serial number using letters and digits

我正在開發一個用於在C#和DevExpress中接受訂單的應用程序,並且需要一個生成唯一訂單號的函數。 訂單號必須包含字母和數字,且長度為20 ..我已經看到了Guid.NewGuid()之類的東西,但我不希望它是完全隨機的,也不希望是一個自動遞增的數字..

有人可以幫忙嗎? 即使它是另一種語言的腳本,我也急切需要想法:)

您可以創建自己的類型。 假設yyyyMMddWWW-YYY-XXXXXXX,其中WWW是商店編號,YYY收銀員ID XXXXXXX是十六進制數字(->也許是您將其變為十六進制的實際自動遞增數字)。 這只是一個想法。 恐怕您必須根據系統的要素來決定它的狀態。

編輯:同樣,如果您可以對其應用校驗數字算法,也將有助於避免錯誤

兩種不同的方法:

  • 創建當前時間的MD5或SHA1哈希
  • 增量編號的哈希

就像Oded建議的一樣,Guid不是隨機的(嗯,如果您有網卡,則不是)。 它基於時間和位置坐標。 有關詳細說明,請參見Raymond Chens博客文章
最好為訂單ID使用自動遞增的int。 我不明白您為什么不想使用它或使Guid失敗?

除了自動ID來保持唯一性並代表系統中不同訂單的順序外,我想不出其他任何方法。

我想到一個想法。
將DateTime.Now.Ticks轉換為十六進制字符串。
瞧, String.Format("{0:X}", value);
如果不夠長,您說您需要20位數字,則始終可以填充零。

  1. 獲取主板ID
  2. 獲取硬盤ID
  3. 以任何方式合並
  4. 添加您的密碼
  5. 應用MD5
  6. 應用Base54

結果:鏈接到當前客戶端PC的序列號:)

我的兩分錢。

如果您需要創意,請查看LuhnLuhn mod N算法。

盡管這些算法不是唯一的代碼生成器,但它們可能會為您提供一些有關如何生成可以驗證的代碼的想法(這樣,您就可以在將代碼發送到數據庫之前驗證代碼的正確性)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM