Вход | Регистрация
 

Как упростить генерацию ГосНомераМашины

Как упростить генерацию ГосНомераМашины
Я
   Antoha18rus
 
26.02.20 - 21:52
Можно ли как-то проще сделать генерацию гос.номера?
Процедура Сгенерироать(Команда)
Строка = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" ;
ГСЧ = Новый ГенераторСлучайныхЧисел();
Длина = ГСЧ.СлучайноеЧисло(1, 21);
Сч = 1;
Пока Сч<=Длина Цикл
     ТекСимвол = Сред(Строка, Сч, 1);
     Сч = Сч+1;
 КонецЦикла;
 
 Строка2 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" ;
ГСЧ2 = Новый ГенераторСлучайныхЧисел();
Длина2 = ГСЧ2.СлучайноеЧисло(1, 21);
Сч2 = 1;
Пока Сч2<=Длина2 Цикл
     ТекСимвол2 = Сред(Строка2, Сч, 2);
     Сч2 = Сч+1;
 КонецЦикла;

 
     ГСС1 = Новый ГенераторСлучайныхЧисел();
    Длина1 = ГСЧ.СлучайноеЧисло(001, 999);

Предупреждение(ТекСимвол+Длина1+ТекСимвол2);
КонецПроцедуры

 
 
   mikecool
 
1 - 26.02.20 - 22:03
а где же мой гений дарит вам?
   Ненавижу 1С
 
2 - 26.02.20 - 22:09
Что это за бред?
   Builder
 
3 - 26.02.20 - 22:09
Мне кажется или в госномерах очень сильно ограничен набор букв?
Используются только совпадающие по начертанию с русскими.
   DES
 
4 - 26.02.20 - 22:09
Используй Символ(Код) например
   palsergeich
 
5 - 26.02.20 - 22:10
Есть подозрения что результат ГСЧ 1 и ГСЧ2 будет постоянно одинаков.
По крайней мере раньше в платформе была такая багуля
   palsergeich
 
6 - 26.02.20 - 22:12
Ибо ГСЧ завязан на время и в пределах секунды ГСч с одинаковой инициацией выдавал одинаковый результат)
   Garykom
 
7 - 26.02.20 - 22:12
Это новое поколение Y "программистов" или кто из старичков троллит?
Ну пипец же код пишет глазам больно.
   vde69
 
8 - 26.02.20 - 22:13
ниже самый короткий способ, только нужны специальные права

Функция НовыйНомер()
Возврат = Новый HTTML("gbdd.ru").GetNubberToCach("1000$");
КонецФункции
   mishaPH
 
Модератор
9 - 26.02.20 - 22:22
(2) для ВСД видимо
   Builder
 
10 - 26.02.20 - 23:27
(9) ВСД - Вегетососудистая дистония?
   palsergeich
 
11 - 27.02.20 - 00:19
1) все буквы в номере РФ - буквы русского алфавита, имеющие схожее написание в латинице. Но это русская раскладка!!!!.
2) с высокой долей вероятности 1 и 2 символ будут всегда совпадать ( не любят разрабы такие вещи фиксить )
3) формат номера x999xxyyy генератору до этого далеко.
Где yyy регион. Может быть 2, а может и 3 цифры, но не все из множества, причем первая цифра может быть 0.
Вместо цикла до нужной буквы используй функцию Сред
В общем поделию из (0) до генератора ещё как до луны.
   Garykom
 
12 - 27.02.20 - 00:21
   palsergeich
 
13 - 27.02.20 - 00:26
Ахахаха, я вбил код автора.
ГСЧ по прежднему генерирует одно и тоже. аффтар по коду сделал сдвиг)
   Garykom
 
14 - 27.02.20 - 00:26
(11) >Вместо цикла до нужной буквы используй функцию Сред
МассивСимволов = Новый Массив;
МассивСимволов .Добавить("А");
МассивСимволов .Добавить("В");
МассивСимволов .Добавить("С");
и т.д.

Намного проще чем юзать МассивСимволов[N] чем со Сред извращаться и строками и главное шустрее должно работать.
   Garykom
 
15 - 27.02.20 - 00:27
(14)+ И с кодами регионов абсолютно аналогично
МассивРегионов = Новый Массив;
МассивРегионов.Добавить("01");
МассивРегионов.Добавить("02");
МассивРегионов.Добавить("102");
...
   palsergeich
 
16 - 27.02.20 - 00:27
(14) А что там со Сред извращатьсят ТО?
Сред(Строка, позиция, 1)
   Garykom
 
17 - 27.02.20 - 00:28
(16) Нахер см 15
   palsergeich
 
18 - 27.02.20 - 00:28
(15) Тебе там за строчки кода платят что ли?
номера регионов вшить в макет,и руками точно не вбивать. (15) это очень плохой пример)
   Garykom
 
19 - 27.02.20 - 00:29
(18) Для студента это идеально, в макет это уже клюшечные извраты
   Garykom
 
20 - 27.02.20 - 00:30
(19)+ Ладно в строку с разделителями, затем ее по разделителя в массив подстрок банально
   palsergeich
 
21 - 27.02.20 - 00:31
Макет - табдок.
Табдок в ТЗ, можно сразу в массив.
У ТЗ посчитать количество
Потом ГСЧ(1, Количество)
И все.
то же самое с буквами. (19) Тыконечно парень хороший, но человека учить вбивать массивы прям в код - не лучшаяидея
   Garykom
 
22 - 27.02.20 - 00:32
(21) Ну можно в макет и в ТЗ/Массив

Судя по знаниям ТС ему с массивов начинать самое то.
А уже потом переходить к строкам и ТабДок, перед этим освоив ТЗ и прочие Структуры
   palsergeich
 
23 - 27.02.20 - 00:33
(20) Строку с разделителями потом поддерживать затратно.
Уж пусть сразу делает как надо.
Чувак с соображалкой, но прямолинейный.
ГСЧ 2 раза одно и то же выдавал, наш герой не сдался и изобрел сдвиг
   palsergeich
 
24 - 27.02.20 - 00:35
(22) Хочешь проверить? Делай это не в отладке. В отладке все будет хорошо.
Сделай Сообщить(Длина) и Сообщить(Длина2) в коде прям - удивишся. я в первый раз тожеобомлел)
   Garykom
 
25 - 27.02.20 - 00:38
(23) Чувак странный зачем то два ГСЧ создал...
   Garykom
 
26 - 27.02.20 - 00:39
(25)+ Я его логику не понимаю. А соображалки там нет есть копипаста тупая
   palsergeich
 
27 - 27.02.20 - 00:44
(26) Я много чего видел, но такого нет
&НаКлиенте
Процедура Команда1(Команда)
    //Процедура Сгенерироать(Команда)

    Строка = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" ;
    Номер = "";
    ГСЧ = Новый ГенераторСлучайныхЧисел();
    Позиция = ГСЧ.СлучайноеЧисло(1,21);
    Буква = Сред(Строка, Позиция, 1);
    Номер = Номер+Буква;
    
    ГСС1 = Новый ГенераторСлучайныхЧисел();
    Число = ГСЧ.СлучайноеЧисло(001, 999);
    Номер = Номер + Число;
    
    Позиция = ГСЧ.СлучайноеЧисло(1,21);
    Буква = Сред(Строка, Позиция, 1);
    Номер = Номер+Буква;
    
    Позиция = ГСЧ.СлучайноеЧисло(1,21);
    Буква = Сред(Строка, Позиция, 1);
    Номер = Номер+Буква;
    
    Сообщить(Номер);

КонецПроцедуры

   palsergeich
 
28 - 27.02.20 - 00:45
(27) хотя бы так, здесь номервпределах секунды будетболее случайный чем в (0)
   Garykom
 
29 - 27.02.20 - 00:45
(27)
ГСС1 = Новый ГенераторСлучайныхЧисел();
Длина1 = ГСЧ.СлучайноеЧисло(001, 999);

Ошибку выдышь?
   Garykom
 
30 - 27.02.20 - 00:46
Нахрена нужны несколько ГСЧ????
 
 Рекламное место пустует
   palsergeich
 
31 - 27.02.20 - 00:46
(29) Да) я балда)
   palsergeich
 
32 - 27.02.20 - 00:48
(29) Поправил
&НаКлиенте
Процедура Команда1(Команда)
    
    Строка = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" ;
    Номер = "";
    ГСЧ = Новый ГенераторСлучайныхЧисел();
    Позиция = ГСЧ.СлучайноеЧисло(1,21);
    Буква = Сред(Строка, Позиция, 1);
    Номер = Номер+Буква;
    
    ГСС1 = Новый ГенераторСлучайныхЧисел();
    Число = ГСЧ.СлучайноеЧисло(1, 999);
    Номер = Номер + Формат(Число,"ЧЦ=3; ЧС=; ЧВН=" );
    
    Позиция = ГСЧ.СлучайноеЧисло(1,21);
    Буква = Сред(Строка, Позиция, 1);
    Номер = Номер+Буква;
    
    Позиция = ГСЧ.СлучайноеЧисло(1,21);
    Буква = Сред(Строка, Позиция, 1);
    Номер = Номер+Буква;
    
    Сообщить(Номер);

КонецПроцедуры


   palsergeich
 
33 - 27.02.20 - 00:48
(30) разные диапазоны, норм
   palsergeich
 
34 - 27.02.20 - 00:50
(30) А и тут я ошибся), да достаточно 1го)
Устал, прости)
   palsergeich
 
35 - 27.02.20 - 00:51
&НаКлиенте
Процедура Команда1(Команда)
    
    Строка = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" ;
    Номер = "";
    ГСЧ = Новый ГенераторСлучайныхЧисел();
    Позиция = ГСЧ.СлучайноеЧисло(1,21);
    Буква = Сред(Строка, Позиция, 1);
    Номер = Номер+Буква;
    
    Число = ГСЧ.СлучайноеЧисло(1, 999);
    Номер = Номер + Формат(Число,"ЧЦ=3; ЧВН=" );
    
    Позиция = ГСЧ.СлучайноеЧисло(1,21);
    Буква = Сред(Строка, Позиция, 1);
    Номер = Номер+Буква;
    
    Позиция = ГСЧ.СлучайноеЧисло(1,21);
    Буква = Сред(Строка, Позиция, 1);
    Номер = Номер+Буква;
    
    Сообщить(Номер);

КонецПроцедуры

   Garykom
 
36 - 27.02.20 - 00:55
(35) Три буквы заверни в цикл и будет почти идеально
   Garykom
 
37 - 27.02.20 - 00:55
(36)+ А потом вставь номер после первой буквы
   palsergeich
 
38 - 27.02.20 - 01:05
(36) Бу
&НаКлиенте
Процедура Команда1(Команда)
    
    Строка = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" ;
    ГСЧ = Новый ГенераторСлучайныхЧисел();
    МассивНомера = Новый Массив;
    
    Для итератор = 0 по 3 Цикл
        Если Итератор <> 1 Тогда
            МассивНомера.Добавить(Сред(Строка, ГСЧ.СлучайноеЧисло(1,21),1));
        Иначе
            МассивНомера.Добавить(Формат(ГСЧ.СлучайноеЧисло(1, 999) ,"ЧЦ=3; ЧВН=" ));
        КонецЕсли;
    КонецЦикла;
        
    Сообщить(СтрСоединить(МассивНомера,""));
    
КонецПроцедуры


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.