Собсна помогите придумать быструю, потокобезопасную функцию генерации рандомной строки по заданной маске.Например я ввожу "qwertyuiop12345" и он генерирует строку только с этими символами.Также было бы неплохо добавить рандомный регистр чтоб выходило что-то типа "S9Hdu9DSdg". P.S На данный момент имеется вот такой высер: PHP: public static string RandomName() { Random random = new Random(); int maxSize = random.Next(5, 10); //Длина рандома (от - до) char[] chars = new char[62]; chars = "abcdefg1234567".ToCharArray(); //Символы которые будут применены в рандоме. byte[] data = new byte[1]; RNGCryptoServiceProvider crypto = new RNGCryptoServiceProvider(); crypto.GetNonZeroBytes(data); data = new byte[maxSize]; crypto.GetNonZeroBytes(data); StringBuilder result = new StringBuilder(maxSize); foreach (byte b in data) { result.Append(chars[b % (chars.Length - 1)]); } return result.ToString(); }
Волшебство системы Windows на Си Code: BOOL (__stdcall *SystemFunction036)(PVOID RandomBuffer, ULONG RandomBufferLength); BYTE random[512]; SystemFunction036=(BOOL (__stdcall *)(PVOID, ULONG))GetProcAddress(GetModuleHandle("Advapi32.dll"), "SystemFunction036"); SystemFunction036(random,sizeof(random)); Ну а по маске, не знаю Пройдись по буферу и скопируй нужные символы в новый массив
PHP: public static string RandomString() { int maxsize = random.Next(5, 10); char[] mask = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890".ToCharArray(); StringBuilder sb = new StringBuilder(); for (int i = 0; i < maxsize; i++) sb.Append(mask[random.Next(random.Next(1, 1000000)) % (mask.Length - 1)]); return sb.ToString(); } Вот ещё такое с потцанчиком надумали, но ресурсоёмко слишком имхо...
Я использую последний вариант, правда, без маски. Код можно слегка улучшить так: Code: StringBuilder sb = new StringBuilder(maxsize); for (int i = 0; i < maxsize; i++) { sb[i] = mask[random.Next(0, mask.Length)]; } И ещё. Ёмкость StringBuilder'а по умолчанию равна 16.
иле так PHP: public static string RandomString(string randomizeAlphabet, int lengthString) { StringBuilder result = new StringBuilder(); for (int i = 0; i < lengthString; i++) result.Append(randomizeAlphabet[random.Next(randomizeAlphabet.Length)]); return result.ToString(); }