# -*- encoding:utf-8 -*- ''' @Author : dingjiawen @Date : 2023/12/12 12:54 @Usage : @Desc : ''' # -*- coding: UTF-8 -*- import numpy as np import setting def encode(text): vector = np.zeros(setting.ALL_CHAR_SET_LEN * setting.MAX_CAPTCHA, dtype=float) def char2pos(c): if c == '_': k = 62 return k # ord()用来返回单个字符的ascii值(0-255)获取unicode值 # chr()用来返回一个【0-255】数值对应的ascii符号 # 48,65,97分别是0,A,a的ascii值 # 等价于ord(c)-ord(0) k = ord(c) - 48 if k > 9: # >9说明不是字母,+10是因为0-9位数字 k = ord(c) - 65 + 10 if k > 35: # +26是因为大写字母有26位 k = ord(c) - 97 + 26 + 10 if k > 61: raise ValueError('error') return k for i, c in enumerate(text): idx = i * setting.ALL_CHAR_SET_LEN + char2pos(c) vector[idx] = 1.0 return vector def decode(vec): char_pos = vec.nonzero()[0] text = [] for i, c in enumerate(char_pos): char_at_pos = i # c/63 char_idx = c % setting.ALL_CHAR_SET_LEN if char_idx < 10: char_code = char_idx + ord('0') elif char_idx < 36: char_code = char_idx - 10 + ord('A') elif char_idx < 62: char_code = char_idx - 36 + ord('a') elif char_idx == 62: char_code = ord('_') else: raise ValueError('error') text.append(chr(char_code)) return "".join(text) if __name__ == '__main__': e = encode("BK7H") print(decode(e))