PN532data.py 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. import time
  2. import serial
  3. import binascii
  4. import re
  5. from decodeChipData import decodeData
  6. import serial.tools.list_ports
  7. #串口打开
  8. def openSer():
  9. port_list = list(serial.tools.list_ports.comports())
  10. if len(port_list) == 0:
  11. print('无可用串口')
  12. raise RuntimeError('无可用串口')
  13. else:
  14. for i in range(0, len(port_list)):
  15. print(port_list[i])
  16. for port in port_list:
  17. print(port[0])
  18. name = port[0]
  19. ser = serial.Serial(name, 9600, timeout=0.5)
  20. # 字节大小
  21. ser.bytesize = 8
  22. # 无校验
  23. ser.parity = serial.PARITY_NONE
  24. # 停止位
  25. ser.stopbits = 1
  26. print("已连接端口:" + str(ser.name) + "\n")
  27. return ser
  28. def huan(ser):
  29. print("你是干什么的!!!!!!!!!!!!!")
  30. 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")
  31. ser.write(da1)
  32. ss = str(binascii.b2a_hex(ser.read(25)))[2:-1]
  33. return ser
  34. # 获取卡号
  35. def getid(ser):
  36. data = bytes.fromhex("00 00 FF 04 FC D4 4A 02 00 E0 00")
  37. ser.write(data)
  38. redata_yid = str(binascii.b2a_hex(ser.read(25)))[2:-1]
  39. if len(redata_yid) == 50:
  40. id = redata_yid[-12:-4]
  41. print("卡号:" + id)
  42. return id, ser
  43. else:
  44. print("数据返回出错:" + redata_yid)
  45. return "0", "0"
  46. # 验证扇区密码
  47. def yanz(ser, id, k, list):
  48. password = "FF FF FF FF FF FF"
  49. password = password.replace(" ", "")
  50. yss = "00 00 FF 0F F1 D4 40 01 61" + k + password + id;
  51. yss = yss.replace(" ", "")
  52. dcs = "00 00 FF 0F F1 D4 40 01 61" + k + ' ' + password + ' ' + id + ' ' + sst(yss[10:]) + " 00"
  53. print('验证秘钥: ' + dcs)
  54. dcs = dcs.replace(" ", "")
  55. yanze = bytes.fromhex(dcs)
  56. ser.write(yanze)
  57. erok = str(binascii.b2a_hex(ser.read(32)))[2:-1]
  58. ma = erok[-8:-4]
  59. # ma = '4100'
  60. if ma == "4100":
  61. print("密码正确")
  62. readdata(ser, k, list)
  63. return ser
  64. else:
  65. print("密码错误\n")
  66. print(dcs)
  67. # 计算16进制字符串和的后两位补码
  68. def sst(data):
  69. sumHex = hex(sum([int(i, 16) for i in re.findall(r'.{2}', data) if i != '']))
  70. sumHexStr = (sumHex + "").replace("0x", "")[1:]
  71. if (sumHexStr == '00'):
  72. return '00'
  73. sumBin = bin(int(sumHexStr, 16))[2:]
  74. temp = ''
  75. for index in range(8 - len(sumBin)):
  76. temp = temp + '0'
  77. sumBin = temp + sumBin + ''
  78. temp = ''
  79. for index in range(len(sumBin)):
  80. if (sumBin[index] == '0'):
  81. temp = temp + '1'
  82. else:
  83. temp = temp + '0'
  84. dcs = hex(int(temp, 2) + 1)[2:]
  85. if (len(dcs) == 1):
  86. dcs = '0' + dcs
  87. return dcs
  88. # 读出块数据
  89. def readdata(ser, k, list):
  90. reco = "00 00 ff 05 fb D4 40 01 30 " + k
  91. reco = reco.replace(" ", "")
  92. command = "00 00 ff 05 fb D4 40 01 30 " + k + ' ' + sst(reco[10:]) + " 00"
  93. print("读取指令:" + command)
  94. recode = bytes.fromhex(command)
  95. ser.write(recode)
  96. ss = str(binascii.b2a_hex(ser.read(64)))[2:-1]
  97. if ss[-9:-4] != "54113":
  98. block_d = ss[-36:-4]
  99. list.append(block_d)
  100. print("读出数据:" + block_d + "\n")
  101. else:
  102. print("读取失败\n")
  103. input("回车继续")
  104. def reader():
  105. ser = openSer()
  106. print(ser.port)
  107. while 1 > 0:
  108. print("读取10个字节")
  109. print(ser.read(100))
  110. time.sleep(1)
  111. list2 = ['03ff0cfcc10100000cf55402656e7218', 'ee5b49cbcd0e2a707a20c0756263c38f', '99b4df9af78e61cea1a2a3a4a5a6a7a8',
  112. '3caf84f96583155b846233f6175bf5b1', '410000093a000000ffffffffffffffff', '13016bc0832ba0141da4619da418cc1e',
  113. '3f70a4949c1f14eafee5f60f62e0fc76', '2f9ecd68477811fa6e25e339b068a9b0', '30c1b7260c227c80473a0af9a5e0e83d',
  114. 'c07e2e1ec9283c49a903304f9edf91dd', '3c656cdee55cf643326933cc21651d6e', '649109fb80c497d0fa88cc143bd98fb8',
  115. '7958184a17413111041178a3cd4d6d8c', '6ef25867355f5533be758a4dc4b380bb', 'df4ed477e4dcfd356abf00cf6cbba0c3',
  116. 'fa6202383c039df9e0afb9e75e244c40', '56d321f7393a97fa6a760f2905e1884f', '6e78cdd146918450bbe3f5f8a9387ed3',
  117. '1b3a79bb4643b07e2f7358c6e48eee2c', 'd75486fa19b02a1af6c98dff274b543d', 'cd53242f44d617abd2399b546069f4c5',
  118. '9c8262a7333cda68ee9d5706f0bd6a23', '21d411e55b2eb5e669b2bf9f3cc3a99a', 'e9b04b0f51442f346202197be956272b',
  119. '3b81e26bca0351ced79bd5aedefd8908', 'e9c8b51598d48742d1126c1d2eaa117d', '548a56a032edc4854988e7be74d8626f',
  120. '520bd9ea95225c58f4cc8bbe2fa74938', '5a1f47085c70577e80dac608adb54000', '80ae246682ae4cc0dd27e7b7a1caee35',
  121. '04e365cbd9cb3b1060dc6ca6585d5460', 'fcb98844aeda307a0a598b6f7d612dcc', '888968ed073aa8b1830cd88ff3a3c67b',
  122. '18f0022fc0e82d9da3f45c8625dbf6de', '961ca6720be2b6b2acd076d4c7fddcd4', '75fb065ddbb0188a567dcc44c85222e7',
  123. '4dff6b70d9921d7a5dc4eaca42b9a368', 'f390a7652148383329337156c0b89d74', 'f2ce67947a89502af5fe09c70f622190',
  124. '90c563ace10ceaafd0c79acf56e5ff77', 'f51e8fd596428db67e6dbdb416031d83', '16ec2d867692f1857771a6c75bd6a182',
  125. 'f977d4ccf3cb02a4ac066e75f284911c', '1c46b925e5679093959e505d64e97e57', 'bdb469bc10b6942f6d67664352ae0cdb',
  126. 'e80103e103e103e103e103e103e103e1', '03e103e103e103e103e103e103e103e1', '03e103e103e103e103e103e103e103e1',
  127. 'a269ecab63fb0ddec0653db2c656e145', 'c30e6274f23f22c5a93ff0a2c78303ea', 'cb610f1ba125dda0f9072b02ae15fb2b',
  128. '722fb62a7a50c8a607dd3447a84ea15d', 'a1b9503a46ae7584541a499ecf413918', 'b8dbc9383e653ffd15e2c2f4587b41d1',
  129. '86ea796794041aa93855f00346fb84e2', 'bd80d36cd2616e6b736cb1e58a13fc70', 'c120cf34c3b2e298041474aff966e64d',
  130. '1443f901e816f7c991f8f0057a1daeaf', '052e60f6ec19a7ca81d4b3bfc9703349', '5d47d338eb3fc65bcf76f9c8c0142b0d',
  131. 'a3ff4fd472a23fa60082f53f23ef5d29', '1f4e22b4bdaaef9e3dec64c8c1ca5606', 'dea0928586e4f655a3c0916881871e9f',
  132. '97eaf18216d5b7be28e72bd61adc73ee', '094a4678e4f94e7d6433418089a2fa02', 'e5f939b5eba90a026a8a0b10538185c2',
  133. 'c520b315225c50a5d0e55a4fccf8140a', 'b336b17ac5a7ceb78f378d84adaaf4d6', 'ada7b701a0fb2df50adf3b24fbc6bc79',
  134. '6eb462abf613fe719354f1e8f3a5dc53', '3609cada3a1dc379ff9e9fd36829b22c', '5440d5c7bf3cca28123a6afa435a8fcd',
  135. 'b0d3f1fc46f185f1aee1f7b732067ef4', 'd49c1706733c5a070a969047293f996b', '489a4cfd749e07a4784523677c72b026',
  136. 'f3011c8cf6dc3bd5fbe242bbfe44a035', '446ce83a84e2f77c2140e0ff74adf690', '90f9d916e34b9526f1a5ba40a008b793',
  137. 'eb3979d996143a2f2b3e8f5f8b3974fd', '6f434424a53b52b298fdb633e0449d4f', '00a8a6f2beea3599069c08e1002af843',
  138. 'e4ceaf9606c97753f59d4946f50f3dec', 'e2b89bcfbd24042ddea95c6ecaf3dbeb', '47388c8431b9fc15e7d30d0841973b0c',
  139. 'da492546c8a05a6607e0441f64c7bd14', 'f8cdf747e678f2992cd59f13f6f8f517', '9814f2180d0339d107bf95ac6eeaa9d5',
  140. 'd97617093b76ce0d8def080bed1b5c50', 'ce264e85cede39ba880ccfb2431144fb', '2c1570c64fe8faf96325da723018b1d6',
  141. 'fc9d40fbd9b605cbbdec5a3e6cb5e6a4', 'd93040615f2accf6620c1444d9be7617', 'd8c379dfcaa931b95a11be0a0d2617f5',
  142. 'b4f13e8b336d30633c24accb47d6037c', '7e6a7414dbda22466de1e41c07ab20ab', 'd7af5ea3e3e2ec50cc7b79cf0a0363bd',
  143. 'c2d0ae9f8631b01e287beade54c32331', '71fd599304b2f5a8e0651c0daeaeeddb', 'dd6d481c783cab43969eabfc232f691d',
  144. '6fec28722f5fa3b78056c8feb93e6050', '7d1cd557f4bade23d42787a5870ea314', 'ff7b7534e538927e4473be70fa6f19bc',
  145. 'b5506bc66ac0081a0cd438e602ff59f1', '95dd9676049f8c75700eba423ff33754', '9237a4e0ed63554b959a7cb108b1e9d4',
  146. 'd3e42cf4cb7b50985cc5bcea5d107292', '9283a2cdce2ed69bd71b1b5ef8b63e39', '4bbf7fcb0514578186bf9ab1b7efb07d',
  147. 'ff53a9a12a0b5bff869a960d02bef6a3', '3f62ab66451bea4f57642d073d0bc6a9', '1c592272902ba73a67ee48b489e2ffc4',
  148. 'fa8df9c9710e05c069c61e154c2c955f', '29384294c55700a6da2d808dc1e921bd', '95e4fca9e5516c557f5ccd5ae403cc50',
  149. 'e7a1428cea5a787c25f1cb4e2de44526', '453aab8b4e7295de7270934b648d1a65', '34ca921dca35deb1a634e22e54c20638',
  150. 'bc7015e533848cfc90a7726e7acdcaf0', 'bcb7c5ff531e31757c5496f6f31f16e6', 'a09447021ed053192b8010eb6f81683a',
  151. 'fad00046813586988cab9004cffc6f19', '477a45207118b14e5f674a797b89cb5c', '2ab1f2b1c91915ecf01607f90a279560',
  152. '49f302af4d21a4d3bc08f7fe30b257da', 'fecc88f8d956cd3f91b3354b13c0842c', '4ebec942a6eeedd140c189a14b95eaa0',
  153. '38490a8da6d790eb2bae13e55a1e8b71', '2bcd23bc76b2222a31f19a69ae1ec297', '07f28a122b17e4276281db4d02633079',
  154. 'a2bb0b89da6a637ec9f280b599004b48', '783a656341a60bfa5cbd1916569ec717', 'fed298915b06f08cbed44e97e328e7bc',
  155. '0148255f13959aa989dcd64521b92b6f', '88638aa1a5e13ad5bc2ca17a4f0e8bcb', 'f9d87fbb46f584c46b01060189f47b45',
  156. 'd52f5cac52cb4a45b4e270d969d3b5c8', '231c0b760a93de341af2d7501a08e9f8', '2ad6d6982e8b0aaa6c5f01ff3e4bad06',
  157. '3329003589c5c8a48b1ca488361743ad', '80df97340671206464c8335f3a07f573', 'bcf32ba460bcee64209aa19eb951e652',
  158. 'd90238da63f30de96442de9993afadab', '5be948b143f98e5cabb330a587100232', 'd6c8f7e4a491e452d8ef9415e7ca8d5e',
  159. '21e2df587430bbc8a97be8917364220a', '2f851c453738894f190e4d0eded0965a', 'eb80864bb4a7b005cfbf557a15271445',
  160. 'c54195a008639f79ea6e826611122884', '15f36645ee70e8961765d5fc2cead310', 'b59ea9973b9ee1c9a8cfda110ec51487',
  161. 'a9b3d1b047e2fd2d98b871e970aff563', 'ed86c24c756628147544ba382a32a401', '82fa2de96e800e52dccf68f6d80bd867',
  162. '3c2338b9201934d1761c6deb2005257c', 'a105d6add8d3b166c61015f43afa6047', '6814fad0facc0b35eb773aa794b17075',
  163. 'de57c68607f885af82af51f3687fc109', '9cedc9641bb18c515d8d8a4ce521b195', 'c8589d5a16e0fb13503fbf4d9f7d763b',
  164. 'd2dd70e00318896b81ca7db8de200073', '1b0ff783e01cf19fba4316b61cae52a8', '3ecf7245a7e75007bb202d28ffd8c5e3',
  165. '442ac7989338b28106253cae64868409', 'a0b367bf15521ca96f5ed3f356234c5a', 'd37624de127f2d747b01662809b23c9e',
  166. '3bfcbd277c8b518bb2307b68eb5734e5', 'bcb1e75374abe55fefeee091fc9bee6c', 'a7c9379192ddb97c9a33c3e6860db9a9',
  167. '0eba5916f6080a22b9ac3619337ac91e', '70c355b44baf0a7e2a5b3fb9199fdbc9', '9610d2d9d1931c1ed124968489e0873f',
  168. '758cf337fe1f140cca3e0a010b1747b9', '44a7f668a16059fa3d7f4d37d4bcee82', 'c6c7767bdba52ef88f78f3bb9ae55e41',
  169. '7b67dd458fb9f5c83a6c0ea362b35d73', 'b474d82f7e7fd20dfd849e5ed9fb0154', '6bb52ca81bb0017f94a8e96c04c0e0c6',
  170. '0163a76f34204b054883556b3528b075', '8ca31cc4c0cdc050716e16931e16cd71', 'c66cb94e4abd39288fe422729abbc221',
  171. 'a07fbad8be92c6bffa73b66d495e6653', 'e11946865620514c1a38bbcd59800d74', 'c73d52ceb72161a3a7788d4445f8a091',
  172. '81d23d7feb882080df20fea6e618e1f5', '471f095f026abf64908fce1ca7655480', '1da75c3c3979361206a853c7fabb8db2',
  173. '3cec4f76af7f9eda6fbc1e3e9d8d13f3']
  174. def readChip():
  175. readerData = reader()
  176. list = readerData[0]
  177. uid = readerData[1]
  178. list = list2
  179. temperature_data = ''
  180. chipNumber = ''
  181. chipData = ''
  182. if (list != '0'):
  183. chipData = ''.join(list)
  184. chipData = chipData[22:]
  185. chipNumber = chipData[6:100]
  186. data = re.findall(r'.{2}', chipData)
  187. jdata = ' 0x'.join(data)
  188. jdata = '0x' + jdata + ' \\n'
  189. temperature_data = decodeData(jdata)
  190. temperature_data = ','.join('%s' % id for id in temperature_data)
  191. print(temperature_data)
  192. return temperature_data, chipNumber, chipData, uid