Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Генератор номеров телефонов или случайных чисел (http://forum.oszone.net/showthread.php?t=315501)

DJIOAN 03-06-2016 10:30 2639837

Генератор номеров телефонов или случайных чисел
 
На работе зашла речь о программе по подбору пароля на wi-fi и сошлись во мнении что многие ставят номера телефонов. Вот я и решил состряпать батник для генерации случайных номеров и записывался в файл.
Скрытый текст
Код:

@echo off
:loop
setlocal enabledelayedexpansion
set string=0123456789
set col=100000
set /p cod="Введите код типа +7978 и две первые цифры номера 70, 71 ...:"
::^Тут количество букв
for /l %%A IN (1,1,%col%) DO (
 set num=!random! %% 3
 call :out !num!
)
Echo. Успешно! Продолжаем? ....
goto loop
:out
echo.%cod%%1!>>key.txt



Он работает неплохо генерирует 100 000 вариантов но есть несколько недостатков которые я не могу исправит:
  • не всегда полный номер в к примеру +7978 11 11 111, а не хватает в основном одного символа
  • не смог сделать чтоб генерации не повторялись в текстовом документе
  • не смог задать диапазон к примеру код остается +7978 а 7 остальных цифр генерировались от 7000000-9000000

Если есть какие-то предложения то помогите пожалуйста. Я не программист но стараюсь и мне это нравится. :up :oszone:

Foreigner 03-06-2016 23:48 2640092

Цитата:

Цитата DJIOAN
а 7 остальных цифр генерировались от 7000000-9000000 »

Два миллиона записей, это на несколько часов, можете попробовать если есть время, исправьте диапазон на нужный:
Код:

@echo off
setlocal enabledelayedexpansion

for /l %%i in (7000,1,9000) do (

        set "a_!random!!random!!random!!random!!random!!random!!random!=%%i"

)

1>numbers.txt (for /f "tokens=2 delims==" %%i in ('set a_') do echo +7978 %%i)


Iska 04-06-2016 22:29 2640268

Цитата:

Цитата DJIOAN
В коде где : и out воспринял как смайлик »

Вы ж не первый день замужем на конференции и должны помнить, что код следует обрамлять тэгом «code» (и только потом, по желанию, тэгом «spoiler»).


Вообще такие вещи лучше делать, имея нормальный генератор псевдослучайных чисел и нормальную арифметику — WSH/PoSH.

DJIOAN 06-06-2016 11:18 2640692

Цитата:

Цитата Foreigner
Два миллиона записей, это на несколько часов, можете попробовать если есть время, исправьте диапазон на нужный: »

Спасибо за вариант, я его проверил изменил значения но он дал после +7978 всего 4-5 цифр из 7 посмотрю еще может смогу доработать :)

Foreigner 06-06-2016 11:41 2640703

DJIOAN, 4-5 он не мог дать. Только с 7000 до 9000. Но как правильно заметил Iska, лучше использовать PowerShell:

Код:

get-random (7000000..9000000) -count 2000000 | foreach { '+7978 ' + $_ } | sc numbers.txt
В результате конечный файл размером 28.5 Мб создался за 2-3 минуты (может и меньше, отходил). Количество строк 2 млн.

ЗЫ. Батник может вообще не осилить такой объем. Потеряете несколько часов.

Iska 06-06-2016 14:22 2640768

Foreigner, «get-random» гарантированно даёт уникальные числа на выходе?

Foreigner 06-06-2016 15:05 2640781

Iska, Не знаю, и как это проверить? В данном случае "перемешивает" числа из диапазона с 7000000 до 9000000.

Iska 08-06-2016 11:47 2641351

Foreigner, порылся малость. В данном случае — использование коллекции — как я понимаю, повторов не будет, он её тупо перемешивает и извлекает. А для -min и -max свойства -count нет.

DJIOAN 09-06-2016 14:11 2641698

разобрался с комбинацией CMD в PowerShell отработал на ура буквально за 5 мин может чуть меньше.
Скрытый текст
Код:

@echo on
SetLocal EnableExtensions

for /f "delims=" %%i in ('
powershell "(get-random (7000000..9000000) -count 2000000 | foreach { '+7978' + $_ } | sc numbers.txt)"
') do set count=%%i
pause



Есть еще вопрос я просто не знаю как это осуществить. Как сделать генератор дат дней рождений. К примеру чтоб он спрашивал год а день и месяц генерировал и все это записывало в txt. Ну очень нужно я столько вариантов нашел переделывал но в этом случае вообще не получается. Много мыслей, переменных но не знаю как все скомпоновать. Если есть возможность подкиньте идею с чего посмотреть или начать. Спасибо.

alpap 09-06-2016 14:56 2641711

Код:

@echo off
set/p y="Введите год: "
set min=1& set max=12& set/a m=%random%%%(max-min+1)+min
set min=1& set max=31& set/a d=%random%%%(max-min+1)+min
echo %d%-%m%-%y%
pause>nul

Предугадывая следующий вопрос:
Код:

@echo off
setlocal enabledelayedexpansion
set/p y="Введите год: "
set min_m=1& set max_m=12
set min_d=1& set max_d=31
for /l %%a in (1,1,10) do (
 set/a "m=!random!%%(max_m-min_m+1)+min"
 set/a "d=!random!%%(max_d-min_d+1)+min"
 echo !d!-!m!-!y!>>"name.txt"
)
pause>nul


alpap 09-06-2016 15:19 2641717

Чуток шлифанул для красоты:
Код:

@echo off
setlocal enabledelayedexpansion
set/p y="Введите год: "
set min_m=1& set max_m=12
set min_d=1& set max_d=31
for /l %%a in (1,1,10) do (
 set/a "m=!random!%%(max_m-min_m+1)+min"
 set/a "d=!random!%%(max_d-min_d+1)+min"
 if !d! leq 9 set "d=0!d!"
 if !m! leq 9 set "m=0!m!"
 echo !d!-!m!-!y!>>"name.txt"
)
pause>nul


DJIOAN 09-06-2016 15:31 2641720

спасибо alpap, за варианты чуть позже протестирую
Я еще чуть доработаю и помещу в меню для выбора варианта день-месяц-год или год-месяц-день

DJIOAN 21-06-2016 09:51 2644473

alpap, я поработал с вашим вариантом генерации дат рождений он отработал отлично, но есть как по мне есть некоторые недоработки
- генерирует приблизительно 6-8 значений (то есть не так как надо чтоб с 01 - 31 число 01 месяца, затем с 01-31 число 02 месяца)
- делает в разброс (но это не так важно, предыдущая причина куда важней)[/list]

Iska 21-06-2016 17:07 2644573

DJIOAN, RANDOM в пакетных файлах не совсем псевдослучаен. Точнее, совсем не псевдослучаен. Это не «лечится».

DJIOAN 23-06-2016 09:46 2645025

доброго времени суток Iska, , мне и не обязательно в разброс мне более важно чтоб он генерировал типа:
Код:

01011999
02011999
03011999
.....
31011999
01021999
02021999

и так по все месяцам, а вариант alpap, дает всего где-то лишь 8 вариантов в разброс.

Elven 23-06-2016 11:19 2645049

вотаквот? правда здесь будут и 30 февраля и 31 апреля и т.д., но на них мне лень писать лишние условия
Код:

@echo off
for /l %%y in (1980,1,2016) do (
for /l %%m in (1,1,12) do (
for /l %%d in (1,1,31) do (
if %%d leq 9 (if %%m leq 9 (
echo 0%%d-0%%m-%%y>>name.txt
) else (
echo 0%%d-%%m-%%y>>name.txt
)) else (
if %%m leq 9 (
echo %%d-0%%m-%%y>>name.txt
) else (
echo %%d-%%m-%%y>>name.txt
))
)))

годы указаны с 1980 по 2016, думаю, найти их в коде и поменять на нужные не составит труда.

DJIOAN 23-06-2016 16:51 2645128

спасибо Elven, не составит точно, я на них первым делом обратил внимание. я подумываю туда если все нормально то переменные задавать от и до

Iska 24-06-2016 00:29 2645230

Elven, DJIOAN, и где тут «рандом»?!

DJIOAN 24-06-2016 08:54 2645267

Iska, для генерирования дат рождений я не просил рандом он там не особо нужен

Elven 24-06-2016 14:22 2645361

Iska, суть в том, что нужны значения для перебора(подбора), если я правильно понял. Т.о. рандом или псевдорандом здесь совершенно не в помощь. Конечно есть некоторая отличная от нуля вероятность, что рандомное число из десятка тысяч значений совершенно случайно совпадет с искомым, но точно так есть такая же вероятность, что тот самый рандом попадет только на последнем значении. Опять же задача странная, но если отбросить здравый смысл и следовать более-менее нравящемуся путю из указанных в ТЗ - вполне просто решающаяся.
осторожно, мат.

Iska 24-06-2016 14:47 2645371

Цитата:

Цитата Elven
Iska, суть в том, что нужны значения для перебора(подбора), если я правильно понял. »

Ну, а я — нет.

alpap 24-06-2016 18:09 2645406

Цитата:

Цитата DJIOAN
и сошлись во мнении что многие ставят номера телефонов »

у моего товарища ставят код штрих-кода, такая работа, так что переписывайте код.


Время: 08:43.

Время: 08:43.
© OSzone.net 2001-