36 lines
950 B
Python
36 lines
950 B
Python
import re
|
|
|
|
def to_set_c(text):
|
|
# Match pairs of digits and map them to the appropriate ASCII characters
|
|
return ''.join([
|
|
chr(int(ascii_code) + 100 if int(ascii_code) > 94 else int(ascii_code) + 32)
|
|
for ascii_code in re.findall(r'\d{2}', text)
|
|
])
|
|
|
|
def check_sum_128(data, start_code):
|
|
sum_value = start_code
|
|
for i, char in enumerate(data):
|
|
code = ord(char)
|
|
value = code - 100 if code > 199 else code - 32
|
|
sum_value += (i + 1) * value
|
|
|
|
checksum = (sum_value % 103) + 32
|
|
if checksum > 126:
|
|
checksum += 68
|
|
return chr(checksum)
|
|
|
|
def encode128(text, code_abc="B"):
|
|
start_code = chr(ord(code_abc.upper()) + 138)
|
|
stop = chr(206)
|
|
|
|
if code_abc.upper() == 'C':
|
|
text = to_set_c(text)
|
|
|
|
check = check_sum_128(text, ord(start_code) - 100)
|
|
|
|
# Replace spaces with ASCII 194
|
|
text = text.replace(" ", chr(194))
|
|
|
|
return start_code + text + check + stop
|
|
|