I've been developing a Python tool to generate a bit.ly wordlist. Here are the particularities of bit.ly links:
I already did the first 3 conditions, but I can't find a way to do the last.
from itertools import product
def firstN(chars, length):
for firstNumber in product(chars, repeat=length):
yield ''.join(firstNumber)
def combiwords(chars, length):
for letters in product(chars, repeat=length):
yield ''.join(letters)
def lastL(chars, length):
for lastLetter in product(chars, repeat=length):
yield ''.join(lastLetter)
def main():
firstNumber = "32"
letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
lastLetter = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
for wordlen1 in range(1, 2):
for first in firstN(firstNumber, wordlen1):
for wordlen2 in range(6, 7):
for combo in combiwords(letters, wordlen2):
for wordlen3 in range(1, 2):
for word in lastL(lastLetter, wordlen3):
print('https://bit.ly/' + first + combo + word)
if __name__=="__main__":
main()
I wrote a couple of functions which can solve your problem:
import random
import string
def generate_alphanumeric_string_without_sequential_repetitions():
# string.ascii_lowercase means 'abcdefghijklmnopqrstuvwxyz'. If you need it to be case unsensitive, change this to string.ascii_lowercase
allowed_letters = string.ascii_lowercase
allowed_chars = allowed_letters + '0123456789'
result = random.choice(allowed_chars) # init first char of the sequence
# generate characters (which must be alphanumeric) in positions [1,5]
for i in range(1, 5):
random_char = random.choice(allowed_chars)
# avoid sequential repetitions by re-generating a char if is the same of the previous one
while random_char == result[i-1]:
random_char = random.choice(allowed_chars)
result = result + random_char
# generate last char (which must be a letter)
last_char = random.choice(allowed_letters)
# avoid sequential repetitions by re-generating last char if is the same of the previous one
while last_char == result[-1]: # result[-1] is a trick in python for getting the last char of a string
last_char = random.choice(allowed_letters)
return result + last_char
def generate_string():
return str(random.randint(0, 9)) + generate_alphanumeric_string_without_sequential_repetitions()
With the following code executed
random.seed(10)
result = list()
for i in range(0, 10):
result.append(generate_string())
print(result)
I've had the following result:
['9c14ano', '7rkc75k', '1pxc0it', '5y0sq3f', '4xi3p2t', '6capimj', '8xpu92n', '7eu6kon', '3c5te8c', '2yxjhgo']
If you have any questions, just ask in the comments. I hope it helped!