PDA

Показать полную графическую версию : [решено] Генератор номеров телефонов или случайных чисел


Страниц : [1] 2

DJIOAN
03-06-2016, 10:30
На работе зашла речь о программе по подбору пароля на 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
а 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
В коде где : и out воспринял как смайлик »
Вы ж не первый день замужем на конференции и должны помнить, что код следует обрамлять тэгом «code» (и только потом, по желанию, тэгом «spoiler»).

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

DJIOAN
06-06-2016, 11:18
Два миллиона записей, это на несколько часов, можете попробовать если есть время, исправьте диапазон на нужный: »
Спасибо за вариант, я его проверил изменил значения но он дал после +7978 всего 4-5 цифр из 7 посмотрю еще может смогу доработать :)

Foreigner
06-06-2016, 11:41
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
Foreigner, «get-random» гарантированно даёт уникальные числа на выходе?

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

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

DJIOAN
09-06-2016, 14:11
разобрался с комбинацией 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
@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
Чуток шлифанул для красоты:

@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
спасибо alpap, за варианты чуть позже протестирую
Я еще чуть доработаю и помещу в меню для выбора варианта день-месяц-год или год-месяц-день

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

Iska
21-06-2016, 17:07
DJIOAN, RANDOM в пакетных файлах не совсем псевдослучаен. Точнее, совсем не псевдослучаен. Это не «лечится».

DJIOAN
23-06-2016, 09:46
доброго времени суток Iska, , мне и не обязательно в разброс мне более важно чтоб он генерировал типа:
01011999
02011999
03011999
.....
31011999
01021999
02021999

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

Elven
23-06-2016, 11:19
вотаквот? правда здесь будут и 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
спасибо Elven, не составит точно, я на них первым делом обратил внимание. я подумываю туда если все нормально то переменные задавать от и до

Iska
24-06-2016, 00:29
Elven, DJIOAN, и где тут «рандом»?!

DJIOAN
24-06-2016, 08:54
Iska, для генерирования дат рождений я не просил рандом он там не особо нужен

Elven
24-06-2016, 14:22
Iska, суть в том, что нужны значения для перебора(подбора), если я правильно понял. Т.о. рандом или псевдорандом здесь совершенно не в помощь. Конечно есть некоторая отличная от нуля вероятность, что рандомное число из десятка тысяч значений совершенно случайно совпадет с искомым, но точно так есть такая же вероятность, что тот самый рандом попадет только на последнем значении. Опять же задача странная (https://www.youtube.com/watch?v=UoKlKx-3FcA), но если отбросить здравый смысл и следовать более-менее нравящемуся путю из указанных в ТЗ - вполне просто решающаяся (https://www.youtube.com/watch?v=B7MIJP90biM). http://cs6.pikabu.ru/images/big_size_comm/2015-05_2/14310343656597.jpg




© OSzone.net 2001-2012