import os, parseopt, random, sequtils, strformat, strutils const Symbols = toSeq("!\"#$%&'()*+,-./:;<=>?@[]^_{|}~") proc passGen(passLength = 10, count = 1, seed = 0, excludeSimilars = false): seq[string] = ## Generate a sequence of passwords. # Initialize the random number generator. if seed == 0: randomize() else: randomize(seed) # Prepare list of chars per category. var lowerLetters = toSeq('a'..'z') upperLetters = toSeq('A'..'Z') digits = toSeq('0'..'9') if excludeSimilars: lowerLetters.delete(lowerLetters.find('l')) for c in "IOSZ": upperLetters.delete(upperLetters.find(c)) for c in "012": digits.delete(digits.find(c)) let all = lowerLetters & upperLetters & digits & Symbols # Generate the passwords. for _ in 1..count: var password = newString(passLength) password[0] = lowerLetters.sample password[1] = upperLetters.sample password[2] = digits.sample password[3] = Symbols.sample for i in 4..