Jump to content
XPEnology Community

kggitj

Rookie
  • Posts

    1
  • Joined

  • Last visited

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

kggitj's Achievements

Newbie

Newbie (1/7)

0

Reputation

  1. since @likeadoc did not keep his word in releasing the serialnumber generator, here the code i sent him (most of the sns will be valid): from random import randrange def get_digit(number, n): return number // 10 ** n % 10 def get_cross_sum(number): return sum([int(i) for i in str(number)]) def get_serial_number(model): """ Generate a serial for the given model :param model: The model shall be between 0 and 1 for 0=DS3615 and 1=DS3617 :return: The serial as string """ model_type = ['LWN', 'ODN'] lwn = range(1640, 1691, 10) odn = [1690] + range(1710, 1791, 10) + range(1810, 1891, 10) model_range = [lwn, odn] model_sn_count = 10 bbb_range = range(000, 901, 100) xyz_range = model_range[model] xyz = xyz_range[randrange(len(xyz_range))] bbb = bbb_range[randrange(len(bbb_range))] element_at = randrange(model_sn_count) # Every block contains 25 serialnumbers digit_x = get_digit(xyz, 3) digit_y = get_digit(xyz, 2) digit_z = get_digit(xyz, 1) aaa = (10 - digit_z + get_cross_sum(bbb)) % 10 increment = [digit_x * 10 + digit_y] if (digit_y + digit_z) <= 10 else [digit_x * 10, digit_y] result = aaa for i in range(1, element_at): result = result + increment[(i + 1) % len(increment)] result = "%d%s%03d%03d" % (xyz, model_type[model], result, bbb) return result if __name__ == '__main__': print "1: DS3615xs" print "2: DS3617xs" input_value = None while input_value is None: input_value = raw_input("Which model (1,2): ") if input_value == "1" or input_value == "2": break input_value = None model = int(input_value) - 1 serial_number = get_serial_number(model) print "SerialNumber: " + serial_number # Algorithm: # SerialNumber is divided by -> XYZ ODN AAA BBB. # ODN is the model specific code # every XYZ/BBB block contains an unknown number of serialnumber and can be 5 or 25, but not too many # AAA = (10 - (Z) + cross_sum(BBB)) modulo 10 # BBB = constant value between 000 - 900 in 100 steps # next value for AAA -> previous value + Offset # # Offset is defined by: # Y + Z <= 10, the offset is +XY, otherwise its alternated +(X*10), +Y
×
×
  • Create New...