import random class UniqueID(object): """ Generates Unique ID. """ DEFAULT_ID_LENGTH = 14 DEFAULT_EXCLUDED_CHARS = ":*^`\",.~;%+-'" def __init__(self, length=DEFAULT_ID_LENGTH, excluded_chars=DEFAULT_EXCLUDED_CHARS): """ `length` - defines length of unique ID. `excluded_chars` - defines chars excluded during generate process of unique ID. """ self.id_length = length self.excluded_chars = excluded_chars def get_random_bits(self): """ Method returns random number included in max 8 bits. """ return random.getrandbits(8) def is_approved_ascii(self, ascii_number): return 126 >= ascii_number >= 33 def is_excluded_char(self, current_char): """ Method checks if given char is not in excluded chars list. """ return current_char in self.excluded_chars def generate_id(self): """ Method generates unique ID. """ unique_id = "" while len(unique_id) < self.id_length: ascii_number = self.get_random_bits() if self.is_approved_ascii(ascii_number): random_char = chr(ascii_number) if not self.is_excluded_char(random_char): unique_id += chr(ascii_number) return unique_id def get_unique_id(length=UniqueID.DEFAULT_ID_LENGTH, excluded_chars=UniqueID.DEFAULT_EXCLUDED_CHARS): """ Function returns unique ID. """ unique_id = UniqueID(length=length, excluded_chars=excluded_chars) return unique_id.generate_id()