fork download
  1. def crc_remainder(input_bitstring, polynomial_bitstring, initial_filler):
  2. """Calculate the CRC remainder of a string of bits using a chosen polynomial.
  3. initial_filler should be '1' or '0'.
  4. """
  5. polynomial_bitstring = polynomial_bitstring.lstrip("0")
  6. len_input = len(input_bitstring)
  7. initial_padding = (len(polynomial_bitstring) - 1) * initial_filler
  8. input_padded_array = list(input_bitstring + initial_padding)
  9. while "1" in input_padded_array[:len_input]:
  10. cur_shift = input_padded_array.index("1")
  11. for i in range(len(polynomial_bitstring)):
  12. input_padded_array[cur_shift + i] \
  13. = str(int(polynomial_bitstring[i] != input_padded_array[cur_shift + i]))
  14. return "".join(input_padded_array)[len_input:]
  15.  
  16. def crc_check(input_bitstring, polynomial_bitstring, check_value):
  17. """Calculate the CRC check of a string of bits using a chosen polynomial."""
  18. polynomial_bitstring = polynomial_bitstring.lstrip("0")
  19. len_input = len(input_bitstring)
  20. initial_padding = check_value
  21. input_padded_array = list(input_bitstring + initial_padding)
  22. while "1" in input_padded_array[:len_input]:
  23. cur_shift = input_padded_array.index("1")
  24. for i in range(len(polynomial_bitstring)):
  25. input_padded_array[cur_shift + i] \
  26. = str(int(polynomial_bitstring[i] != input_padded_array[cur_shift + i]))
  27. return ("1" not in "".join(input_padded_array)[len_input:])
  28.  
  29.  
  30.  
  31.  
  32.  
  33.  
  34. print(crc_remainder('10011010000', '1101', '1'))
  35.  
Success #stdin #stdout 0.1s 14156KB
stdin
Standard input is empty
stdout
001