Random strings from your own alphabet, plus NanoID and ULID
Duplicate characters in the alphabet are ignored. Generation uses crypto.getRandomValues.