C# 如何產生不重複的隨機碼

某些情況下,需要產生一系列的亂碼,而且不重複。

下面兩種方式都可以達到效果

下面這個範例是打亂 1 - 9999 數字排序,然後取出前 1000 筆紀錄來使用。

方法一:傻瓜產生法

一般而言會使用迴圈,然後一邊產生亂碼一邊檢查是否重複。
Random rnd = new Random();
List<int> list1 = new List<int>();
do
{
    int number = rnd.Next(1, 9999);
    int dup = list1.IndexOf(number);
    if (dup < 0)
    {
        list1.Add(number);
    }
} while (list1.Count < 1000);



優點:速度快
缺點:當取號數量等於亂數數量時,可能會變成迴圈永遠不會結束(因為最後一碼超難取到)。

方法二:洗牌法

下面使用一種亂數排序方式,將一系列數字打亂其順序,然後再取出要使用的數字範圍,就可以很快的得到我們要的亂數範圍。

Random rnd = new Random();
List<int> randomList = Enumerable.Range(1, 9999)
    .OrderBy(x => rnd.Next()).Take(1000).ToList();



優點:直覺取號,當取號數量等於亂數數量時保證可取。
缺點:耗時稍多(其實頂多比方法一多十幾毫秒而已)。

夠簡單吧!




留言

這個網誌中的熱門文章

【研究】列印的條碼為什麼很難刷(掃描)

C# 使用 Process.Start 執行外部程式

統一發票列印小程式