Каталог решений - Генератор случайных чисел без дубликатов

Генератор случайных чисел без дубликатов

Генератор случайных чисел без дубликатов

В наличии

Хочу рассказать о своем первом опыте работы с Генератором Случайных Чисел без дублей.

Категория:

Описание

Вся проблема в том, что ГенераторСлучайныхЧисел на производительных компьютерах так быстро генерит число, что получается много дубликатов даже в больших числах в конце интервала. Что я имею в виду? Например, мне необходимо было сгенерировать случайным образом 10-ти значные ИНН пусть 20 штук, сделал так:

    

Для н=1 по 20 Цикл
        Код = "";
        Для у=1 по 10 Цикл
            ГСЧ = Новый ГенераторСлучайныхЧисел(ТекущаяУниверсальнаяДатаВМиллисекундах());
            Число = ГСЧ.СлучайноеЧисло(0,9);
            Код = Код + Формат(Число,"ЧЦ=1; ЧН=0; ЧВН=; ЧГ=0");
        КонецЦикла;
        Сообщить(Код);
    КонецЦикла;   

 
 

Результат

5555333333
3333333333
3333333333
3333333333
3444444444
4444444444
4999999999
9999999999
9555555555
5555555555
2222222222
2222222222
6666666666
6666666666
2222222222
2222222222
3333333333
3333333333
1111111111
1111111115

Как видите, получилось много дубликатов. В публикации //sale.itcity.ru/public/553616/ говорится о регистре сведений, в котором все хранится и происходит проверка на наличие дублей, я бы тоже использовал такой вариант при необходимости, но мне просто нужно было нагенерить ИНН, и я использовал Массив, в котором проверяю уже существующие коды

    

Массив = Новый Массив();
    Для н=1 по 20 Цикл
        Найден = Истина;
        Пока Найден Цикл
            ГСЧ = Новый ГенераторСлучайныхЧисел(ТекущаяУниверсальнаяДатаВМиллисекундах());
            Код = "";
            Для у=1 по 10 Цикл
                Число = ГСЧ.СлучайноеЧисло(0,9);
                Код = Код + Формат(Число,"ЧЦ=1; ЧН=0; ЧВН=; ЧГ=0");
            КонецЦикла;
            Результат = Массив.Найти(Код);
            Если Результат=Неопределено Тогда
                Найден = Ложь;
                Массив.Добавить(Код);
            КонецЕсли;    
        КонецЦикла;    
        Сообщить(Код);
    КонецЦикла;    

 

Результат

8043056388
9102338554
6249282932
1198388359
0526412897
7009103148
0571174217
8993611720
3929803898
7864312503
9471210028
0252270828
4561671060
9351136286
3376451113
7216940055
4858606383
3378262630
6057792110
0900779364

 

Может, кому-то поможет!

has been added to your cart:
Оформление заказа