Generowanie losowego znaku, napisu lub liczby w c#

20-lut-2011

To dziwne, ale niekiedy w programie trzeba wygenerować coś przypadkowego. Może chodzi o jakiś klucz zabezpieczeń, jakieś hasło, może zmieniający się z sesji na sesję token itp. W takim przypadku lepiej zdać się na dopracowane metody generowania liczb pseudolosowych wbudowanych w .NET.

Mamy taką klasę, jak Random. Random potrafi generować liczby całkowite, double i wreszcie tablice bajtów wypełnione przypadkowymi danymi.

Aby skorzystać z generatora najpierw musisz utworzyć obiekt:

Random _random=new Random();

Do konstruktora można przekazać tzw. seed – liczbę która posłuży do zainicjowania generatora. Wartość ta powinna również być dość przypadkowa (np. bieżąca liczba milisekund z zegara systemowego plus ostatnie cyfry adresu IP…), jeżeli jednak pominiesz ten argument konstruktor sam zadba o wygenerowanie własnej przypadkowej liczby seed.

Aby pobierać kolejne losowe wartości użyj metod:

  • _random.Next() ;
    zwraca liczbę całkowitą, nieujemną
  • _random.Next(i);
    zwraca liczbę całkowitą nieujemną mniejszą od i
  • _random.Next(i,j)
    zwraca liczbę całkowitą >=i i <j
  • _random.NextDouble()
    zwraca liczbę double między 0.0, a 1.0
  • _random.NextBytes(bufor)
    wypełnia bufor losowymi liczbami

Aby więc generować losowe litery z przedziału ‘A’ – ‘Z’ można użyć:

(char)_random.Next(’A’, 'Z’ + 1));

Aby generować znaki cyfr można użyć:

(char)_random.Next(’0′, '9′ + 1));

 Metoda generująca losowy ciąg znaków może więc wyglądać tak:

public static string GetRandomString(int length)
{
    Random _random=new Random();
    StringBuilder builder= new StringBuilder();
    for(int i =0; i<length;i++)
        builder.Append((char)_random.Next(’A’, 'Z’ + 1));
    return builder.ToString();
}

Pozostaje życzyć, aby los zawsze Ci sprzyjał!

Komentarze są wyłączone

Autor: Rafał Kraik