import time import serial import binascii import re from decodeChipData import decodeData import serial.tools.list_ports #串口打开 def openSer(): port_list = list(serial.tools.list_ports.comports()) if len(port_list) == 0: print('无可用串口') raise RuntimeError('无可用串口') else: for i in range(0, len(port_list)): print(port_list[i]) for port in port_list: print(port[0]) name = port[0] ser = serial.Serial(name, 9600, timeout=0.5) # 字节大小 ser.bytesize = 8 # 无校验 ser.parity = serial.PARITY_NONE # 停止位 ser.stopbits = 1 print("已连接端口:" + str(ser.name) + "\n") return ser def huan(ser): print("你是干什么的!!!!!!!!!!!!!") da1 = bytes.fromhex("55 55 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff 03 fd d4 14 01 17 00") ser.write(da1) ss = str(binascii.b2a_hex(ser.read(25)))[2:-1] return ser # 获取卡号 def getid(ser): data = bytes.fromhex("00 00 FF 04 FC D4 4A 02 00 E0 00") ser.write(data) redata_yid = str(binascii.b2a_hex(ser.read(25)))[2:-1] if len(redata_yid) == 50: id = redata_yid[-12:-4] print("卡号:" + id) return id, ser else: print("数据返回出错:" + redata_yid) return "0", "0" # 验证扇区密码 def yanz(ser, id, k, list): password = "FF FF FF FF FF FF" password = password.replace(" ", "") yss = "00 00 FF 0F F1 D4 40 01 61" + k + password + id; yss = yss.replace(" ", "") dcs = "00 00 FF 0F F1 D4 40 01 61" + k + ' ' + password + ' ' + id + ' ' + sst(yss[10:]) + " 00" print('验证秘钥: ' + dcs) dcs = dcs.replace(" ", "") yanze = bytes.fromhex(dcs) ser.write(yanze) erok = str(binascii.b2a_hex(ser.read(32)))[2:-1] ma = erok[-8:-4] # ma = '4100' if ma == "4100": print("密码正确") readdata(ser, k, list) return ser else: print("密码错误\n") print(dcs) # 计算16进制字符串和的后两位补码 def sst(data): sumHex = hex(sum([int(i, 16) for i in re.findall(r'.{2}', data) if i != ''])) sumHexStr = (sumHex + "").replace("0x", "")[1:] if (sumHexStr == '00'): return '00' sumBin = bin(int(sumHexStr, 16))[2:] temp = '' for index in range(8 - len(sumBin)): temp = temp + '0' sumBin = temp + sumBin + '' temp = '' for index in range(len(sumBin)): if (sumBin[index] == '0'): temp = temp + '1' else: temp = temp + '0' dcs = hex(int(temp, 2) + 1)[2:] if (len(dcs) == 1): dcs = '0' + dcs return dcs # 读出块数据 def readdata(ser, k, list): reco = "00 00 ff 05 fb D4 40 01 30 " + k reco = reco.replace(" ", "") command = "00 00 ff 05 fb D4 40 01 30 " + k + ' ' + sst(reco[10:]) + " 00" print("读取指令:" + command) recode = bytes.fromhex(command) ser.write(recode) ss = str(binascii.b2a_hex(ser.read(64)))[2:-1] if ss[-9:-4] != "54113": block_d = ss[-36:-4] list.append(block_d) print("读出数据:" + block_d + "\n") else: print("读取失败\n") input("回车继续") def reader(): ser = openSer() while 1 > 0: print("读取10个字节") print(ser.read(100)) time.sleep(1) list2 = ['03ff0cfcc10100000cf55402656e7218', 'ee5b49cbcd0e2a707a20c0756263c38f', '99b4df9af78e61cea1a2a3a4a5a6a7a8', '3caf84f96583155b846233f6175bf5b1', '410000093a000000ffffffffffffffff', '13016bc0832ba0141da4619da418cc1e', '3f70a4949c1f14eafee5f60f62e0fc76', '2f9ecd68477811fa6e25e339b068a9b0', '30c1b7260c227c80473a0af9a5e0e83d', 'c07e2e1ec9283c49a903304f9edf91dd', '3c656cdee55cf643326933cc21651d6e', '649109fb80c497d0fa88cc143bd98fb8', '7958184a17413111041178a3cd4d6d8c', '6ef25867355f5533be758a4dc4b380bb', 'df4ed477e4dcfd356abf00cf6cbba0c3', 'fa6202383c039df9e0afb9e75e244c40', '56d321f7393a97fa6a760f2905e1884f', '6e78cdd146918450bbe3f5f8a9387ed3', '1b3a79bb4643b07e2f7358c6e48eee2c', 'd75486fa19b02a1af6c98dff274b543d', 'cd53242f44d617abd2399b546069f4c5', '9c8262a7333cda68ee9d5706f0bd6a23', '21d411e55b2eb5e669b2bf9f3cc3a99a', 'e9b04b0f51442f346202197be956272b', '3b81e26bca0351ced79bd5aedefd8908', 'e9c8b51598d48742d1126c1d2eaa117d', '548a56a032edc4854988e7be74d8626f', '520bd9ea95225c58f4cc8bbe2fa74938', '5a1f47085c70577e80dac608adb54000', '80ae246682ae4cc0dd27e7b7a1caee35', '04e365cbd9cb3b1060dc6ca6585d5460', 'fcb98844aeda307a0a598b6f7d612dcc', '888968ed073aa8b1830cd88ff3a3c67b', '18f0022fc0e82d9da3f45c8625dbf6de', '961ca6720be2b6b2acd076d4c7fddcd4', '75fb065ddbb0188a567dcc44c85222e7', '4dff6b70d9921d7a5dc4eaca42b9a368', 'f390a7652148383329337156c0b89d74', 'f2ce67947a89502af5fe09c70f622190', '90c563ace10ceaafd0c79acf56e5ff77', 'f51e8fd596428db67e6dbdb416031d83', '16ec2d867692f1857771a6c75bd6a182', 'f977d4ccf3cb02a4ac066e75f284911c', '1c46b925e5679093959e505d64e97e57', 'bdb469bc10b6942f6d67664352ae0cdb', 'e80103e103e103e103e103e103e103e1', '03e103e103e103e103e103e103e103e1', '03e103e103e103e103e103e103e103e1', 'a269ecab63fb0ddec0653db2c656e145', 'c30e6274f23f22c5a93ff0a2c78303ea', 'cb610f1ba125dda0f9072b02ae15fb2b', '722fb62a7a50c8a607dd3447a84ea15d', 'a1b9503a46ae7584541a499ecf413918', 'b8dbc9383e653ffd15e2c2f4587b41d1', '86ea796794041aa93855f00346fb84e2', 'bd80d36cd2616e6b736cb1e58a13fc70', 'c120cf34c3b2e298041474aff966e64d', '1443f901e816f7c991f8f0057a1daeaf', '052e60f6ec19a7ca81d4b3bfc9703349', '5d47d338eb3fc65bcf76f9c8c0142b0d', 'a3ff4fd472a23fa60082f53f23ef5d29', '1f4e22b4bdaaef9e3dec64c8c1ca5606', 'dea0928586e4f655a3c0916881871e9f', '97eaf18216d5b7be28e72bd61adc73ee', '094a4678e4f94e7d6433418089a2fa02', 'e5f939b5eba90a026a8a0b10538185c2', 'c520b315225c50a5d0e55a4fccf8140a', 'b336b17ac5a7ceb78f378d84adaaf4d6', 'ada7b701a0fb2df50adf3b24fbc6bc79', '6eb462abf613fe719354f1e8f3a5dc53', '3609cada3a1dc379ff9e9fd36829b22c', '5440d5c7bf3cca28123a6afa435a8fcd', 'b0d3f1fc46f185f1aee1f7b732067ef4', 'd49c1706733c5a070a969047293f996b', '489a4cfd749e07a4784523677c72b026', 'f3011c8cf6dc3bd5fbe242bbfe44a035', '446ce83a84e2f77c2140e0ff74adf690', '90f9d916e34b9526f1a5ba40a008b793', 'eb3979d996143a2f2b3e8f5f8b3974fd', '6f434424a53b52b298fdb633e0449d4f', '00a8a6f2beea3599069c08e1002af843', 'e4ceaf9606c97753f59d4946f50f3dec', 'e2b89bcfbd24042ddea95c6ecaf3dbeb', '47388c8431b9fc15e7d30d0841973b0c', 'da492546c8a05a6607e0441f64c7bd14', 'f8cdf747e678f2992cd59f13f6f8f517', '9814f2180d0339d107bf95ac6eeaa9d5', 'd97617093b76ce0d8def080bed1b5c50', 'ce264e85cede39ba880ccfb2431144fb', '2c1570c64fe8faf96325da723018b1d6', 'fc9d40fbd9b605cbbdec5a3e6cb5e6a4', 'd93040615f2accf6620c1444d9be7617', 'd8c379dfcaa931b95a11be0a0d2617f5', 'b4f13e8b336d30633c24accb47d6037c', '7e6a7414dbda22466de1e41c07ab20ab', 'd7af5ea3e3e2ec50cc7b79cf0a0363bd', 'c2d0ae9f8631b01e287beade54c32331', '71fd599304b2f5a8e0651c0daeaeeddb', 'dd6d481c783cab43969eabfc232f691d', '6fec28722f5fa3b78056c8feb93e6050', '7d1cd557f4bade23d42787a5870ea314', 'ff7b7534e538927e4473be70fa6f19bc', 'b5506bc66ac0081a0cd438e602ff59f1', '95dd9676049f8c75700eba423ff33754', '9237a4e0ed63554b959a7cb108b1e9d4', 'd3e42cf4cb7b50985cc5bcea5d107292', '9283a2cdce2ed69bd71b1b5ef8b63e39', '4bbf7fcb0514578186bf9ab1b7efb07d', 'ff53a9a12a0b5bff869a960d02bef6a3', '3f62ab66451bea4f57642d073d0bc6a9', '1c592272902ba73a67ee48b489e2ffc4', 'fa8df9c9710e05c069c61e154c2c955f', '29384294c55700a6da2d808dc1e921bd', '95e4fca9e5516c557f5ccd5ae403cc50', 'e7a1428cea5a787c25f1cb4e2de44526', '453aab8b4e7295de7270934b648d1a65', '34ca921dca35deb1a634e22e54c20638', 'bc7015e533848cfc90a7726e7acdcaf0', 'bcb7c5ff531e31757c5496f6f31f16e6', 'a09447021ed053192b8010eb6f81683a', 'fad00046813586988cab9004cffc6f19', '477a45207118b14e5f674a797b89cb5c', '2ab1f2b1c91915ecf01607f90a279560', '49f302af4d21a4d3bc08f7fe30b257da', 'fecc88f8d956cd3f91b3354b13c0842c', '4ebec942a6eeedd140c189a14b95eaa0', '38490a8da6d790eb2bae13e55a1e8b71', '2bcd23bc76b2222a31f19a69ae1ec297', '07f28a122b17e4276281db4d02633079', 'a2bb0b89da6a637ec9f280b599004b48', '783a656341a60bfa5cbd1916569ec717', 'fed298915b06f08cbed44e97e328e7bc', '0148255f13959aa989dcd64521b92b6f', '88638aa1a5e13ad5bc2ca17a4f0e8bcb', 'f9d87fbb46f584c46b01060189f47b45', 'd52f5cac52cb4a45b4e270d969d3b5c8', '231c0b760a93de341af2d7501a08e9f8', '2ad6d6982e8b0aaa6c5f01ff3e4bad06', '3329003589c5c8a48b1ca488361743ad', '80df97340671206464c8335f3a07f573', 'bcf32ba460bcee64209aa19eb951e652', 'd90238da63f30de96442de9993afadab', '5be948b143f98e5cabb330a587100232', 'd6c8f7e4a491e452d8ef9415e7ca8d5e', '21e2df587430bbc8a97be8917364220a', '2f851c453738894f190e4d0eded0965a', 'eb80864bb4a7b005cfbf557a15271445', 'c54195a008639f79ea6e826611122884', '15f36645ee70e8961765d5fc2cead310', 'b59ea9973b9ee1c9a8cfda110ec51487', 'a9b3d1b047e2fd2d98b871e970aff563', 'ed86c24c756628147544ba382a32a401', '82fa2de96e800e52dccf68f6d80bd867', '3c2338b9201934d1761c6deb2005257c', 'a105d6add8d3b166c61015f43afa6047', '6814fad0facc0b35eb773aa794b17075', 'de57c68607f885af82af51f3687fc109', '9cedc9641bb18c515d8d8a4ce521b195', 'c8589d5a16e0fb13503fbf4d9f7d763b', 'd2dd70e00318896b81ca7db8de200073', '1b0ff783e01cf19fba4316b61cae52a8', '3ecf7245a7e75007bb202d28ffd8c5e3', '442ac7989338b28106253cae64868409', 'a0b367bf15521ca96f5ed3f356234c5a', 'd37624de127f2d747b01662809b23c9e', '3bfcbd277c8b518bb2307b68eb5734e5', 'bcb1e75374abe55fefeee091fc9bee6c', 'a7c9379192ddb97c9a33c3e6860db9a9', '0eba5916f6080a22b9ac3619337ac91e', '70c355b44baf0a7e2a5b3fb9199fdbc9', '9610d2d9d1931c1ed124968489e0873f', '758cf337fe1f140cca3e0a010b1747b9', '44a7f668a16059fa3d7f4d37d4bcee82', 'c6c7767bdba52ef88f78f3bb9ae55e41', '7b67dd458fb9f5c83a6c0ea362b35d73', 'b474d82f7e7fd20dfd849e5ed9fb0154', '6bb52ca81bb0017f94a8e96c04c0e0c6', '0163a76f34204b054883556b3528b075', '8ca31cc4c0cdc050716e16931e16cd71', 'c66cb94e4abd39288fe422729abbc221', 'a07fbad8be92c6bffa73b66d495e6653', 'e11946865620514c1a38bbcd59800d74', 'c73d52ceb72161a3a7788d4445f8a091', '81d23d7feb882080df20fea6e618e1f5', '471f095f026abf64908fce1ca7655480', '1da75c3c3979361206a853c7fabb8db2', '3cec4f76af7f9eda6fbc1e3e9d8d13f3'] def readChip(): readerData = reader() list = readerData[0] uid = readerData[1] list = list2 temperature_data = '' chipNumber = '' chipData = '' if (list != '0'): chipData = ''.join(list) chipData = chipData[22:] chipNumber = chipData[6:100] data = re.findall(r'.{2}', chipData) jdata = ' 0x'.join(data) jdata = '0x' + jdata + ' \\n' temperature_data = decodeData(jdata) temperature_data = ','.join('%s' % id for id in temperature_data) print(temperature_data) return temperature_data, chipNumber, chipData, uid