RosettaCodeData/Task/Password-generator/PARI-GP/password-generator.parigp
2023-07-01 13:44:08 -04:00

15 lines
666 B
Text

passwd(len=8, count=1, seed=0) =
{
if (len <= 4, print("password too short, minimum len=4"); return(), seed, setrand(seed));
my (C=["abcdefghijklmnopqrstuvwxyz","ABCDEFGHIJKLMNOPQRSTUVWXYZ","0123456789","!\"#$%&'()*+,-./:;<=>?@[]^_{|}~"], P, j);
for (i=1, count, K = vector(#C); P = "";
for (l=1, len, K[j = random(#C)+1]++;
P = concat(P, Strchr(Vecsmall(C[j])[random(#C[j])+1]))
);
if (prod(z=1, #K, K[z]), print(P), i--) \\ if password contains all char classes print else redo
);
}
addhelp(passwd, "passwd({len},{count},{seed}): Password generator, optional: len (min=4, default=8), count (default=1), seed (default=0: no seed)");