Что нового

Генератор паролей с исключением повторений.

Centrinar

Новичок
Сообщения
100
Репутация
1
Написал генератор паролей типа: AAAA-BBBB, как реализовать проверку кода на уникальность т.е. исключить повторение? Спасибо!
 

SECTOR

Продвинутый
Сообщения
399
Репутация
59
Я делаю примерно так, когда строка сгенерирована, ищем её среди уже сгенерированых, если такая есть - генерируем заново, если же нет - добавляем и работаем дальше...
Код:
#include <Array.au3>

$aMasks = StringSplit("l,u,n,lu,nu,lun",",")
For $i = 1 To $aMasks[0]
	$aPass = _Generate(10,$aMasks[$i])
	If @error Then
		MsgBox(16,"Ошибка","Код ошибки: "&@error&@CRLF&"Mask: "&$aMasks[$i])
	Else
		_ArrayDisplay($aPass,"Mask: "&$aMasks[$i])
	EndIf
Next


Func _Generate($iCol, $sMask = "lun", $iSec = 2, $iLen = 4)

	If Not IsNumber($iCol) Or $iCol < 1 Then Return SetError(1,0,0)
	If Not IsString($sMask) Or Not StringRegExp($sMask,"[lun]+",0) Then Return SetError(2,0,0)
	If Not IsNumber($iSec) Or $iSec < 1 Then Return SetError(3,0,0)
	If Not IsNumber($iLen) Or $iLen < 1 Then Return SetError(4,0,0)

	Local $i, $j, $x, $pass = "", $return = "", $s = ""
	If StringInStr($sMask,"l") Then $s &= "qwertyuiopasdfghjklzxcvbnm"
	If StringInStr($sMask,"u") Then $s &= "QWERTYUIOPASDFGHJKLZXCVBNM"
	If StringInStr($sMask,"n") Then $s &= "1234567890"
	$s = StringSplit($s,"")

	For $x = 0 To $iCol-1
		Do
			$pass = ""
			For $i = 1 To $iSec
				For $j = 1 To $iLen
					$pass &= $s[Random(1,$s[0],1)]
				Next
				If $i <> $iSec Then $pass &= "-"
			Next
		Until Not StringInStr($return,$pass)
		$return &= $pass
		If $x <> $iCol-1 Then $return &= "|"
	Next

	Return StringSplit($return,"|")

EndFunc
 

AZJIO

Меценат
Меценат
Сообщения
2,874
Репутация
1,194
Centrinar
1. На уникальность из скольки? Нпример уникальность чисел от 1 до 10 всего 10 чисел, остальные будут повторы. Проверять уникальность заранее или после создания очередного пароля?
2. Для небольшого количества паролей подойдёт _ArrayUnique
3. Для большого количества определяем символы участвующие в пароле, и этого узнаём разрядность и максимальное число возможных вариантов паролей. Выражаем пароли в виде чисел от 00000001 до 100000000 условно, их может быть больше при использовании букв. Генерируем пароли используя к примеру это _RandomUnique и далее конвертируем его в буквенный вид с помощью _DecToNum. И вставить тире после 4-го символа.
 
Верх