Python 操作智能卡

搬运工:

PySmartCard--python智能卡操作库

https://www.maybetodaystudio.com/blog/2018/11/25/python_smart_card/

主要就是安装PySmartCard,然后参考里面的Example.py和卡片交互。

from PySmartCard.CpuCard import PcscReader
import time

def send_apdu(reader, apdu, recv_list, readertype=None):
    # Clear list
    recv_list[:] = []
    apdu = apdu.replace(" ", "")
    time1 = time.strftime("%Y_%m_%d %H:%M:%S", time.localtime(time.time()))
    showlog = "{} {} {}".format(time1, " Send: ", apdu)
    # print(time1, " Send: ", apdu)
    print(showlog)
    result = reader.send_apdu(apdu, readertype)
    time2 = time.strftime("%Y_%m_%d %H:%M:%S", time.localtime(time.time()))
    showlog = "{} {} {}".format(time2, " Recv: ", result)
    print(showlog)
    # print(time2, " Recv: ", result)
    # recv values
    recv_list.append(result[:-4])
    # SW
    recv_list.append(result[-4:])


def send_apducommand(reader, apdu, recv_list, readertype=None):
    send_apdu(reader, apdu, recv_list, readertype)
    if recv_list[1][0:2] == "61":
        apdu = "00C00000" + recv_list[1][2:4]
        send_apdu(reader, apdu, recv_list, readertype)
    elif recv_list[1][0:2] == "6C":
        apdu = apdu[0:8] + recv_list[1][2:4]
        send_apdu(reader, apdu, recv_list, readertype)


def test_pcsc():
    print("Test PcscReader...")
    pcsc = PcscReader()
    result = pcsc.get_pcsc_readerlist()
    readerNameList = result.split(";")
    for iname in range(len(readerNameList) - 1):
        showlog = "{} {} : {}".format("reader", iname, readerNameList[iname])
        print(showlog)

    # Identive CLOUD 4700 F Contact Reader 0
    # Identive CLOUD 4700 F Contactless Reader 1

    # linux readername
    # Contact Reader: Identive Identive CLOUD 4500 F Dual Interface Reader
    #                 [CLOUD 4700 F Contact Reader] (53201441201079) 00 00
    # Ctless Reader:Identive Identive CLOUD 4500 F Dual Interface Reader
    #               [CLOUD4700 F Contactless Reader] (53201441201079) 01 00
    # Test PcscReader...
    # reader 0 : NetOp Virtual Smart Card Reader 0
    # reader 1 : OMNIKEY CardMan 5x21 0
    # reader 2 : OMNIKEY CardMan 5x21-CL 0

    readername = "Identive CLOUD 4700 F Contact Reader 0"
    # readername = "Identive CLOUD 4700 F Contactless Reader 1 "
    for iname in range(len(readerNameList) - 1):
        readername = readerNameList[iname]
        result = pcsc.connect_device(readername)
        if len(result) == 0:
            showlog = "{} {} : {}  does not has a smart card here ".format("reader", iname, readerNameList[iname])
            print(showlog)
        else:
            print("{} ConnectDevice Success...".format(readerNameList[iname]))
            print("ATR: ", result)
  


    # 1-contact reader 2-contactless reader
    readertype = 1

    result = pcsc.power_on(readertype)
    if result != 0:
        pcsc.disconnect_device()
        print("Device PowerOn Failed!")
        return -1
    else:
        print("Device PowerOn Success...")

    apdu = "0084000008"
    apdu = "00A4040008 A000000632010105"
    apdu = "00A4040008 A000000333010102"
    revc_info = []
    send_apducommand(pcsc, apdu, revc_info, readertype)
    if revc_info[1] != "9000":
        pcsc.disconnect_device()
        print("Send Apdu Failed!")
        return -1

    apdu = "00B2010C00"
    icount = 1
    while(1):
        send_apducommand(pcsc, apdu, revc_info, readertype)
        if revc_info[1] != "9000":
            print("Send Apdu Failed!")
            return -1
        icount = icount + 1
        if icount > 50:
            break

    pcsc.disconnect_device()
    return 0


if __name__ == '__main__':
    if test_pcsc() == 0:
        print("Test OK...")
    else:
        print("Test Failed!")

2019_02_14 14:38:59 Recv: 6F4B8408A000000333010102A53F500B50424F43204352454449548701019F381B9F6604DF60019F02069F03069F1A0295055F2A029A039C019F3704BF0C0EDF6101029F4D020B0ADF4D020C0A9000

2019_02_14 14:39:01 Recv: 7010570E6222520647777776D2401206240F9000

2019_02_14 14:39:01 Send: 00B2010C00

2019_02_14 14:39:01 Recv: 7010570E6222520647777776D2401206240F9000

2019_02_14 14:39:01 Send: 00B2010C00

……

2019_02_14 14:39:01 Recv: 7010570E6222520647777776D2401206240F9000

Test OK...

Python是一种强大的编程语言,可以用来处理各种类型的数据,包括交通卡口数据。 首先,我们可以使用Python中的文件操作功能,读取交通卡口数据文件。可以使用内置的open函数打开文件,并使用read方法读取文件内容。如果数据文件是以逗号分隔的CSV文件,我们可以使用Python的csv模块来解析数据。 一旦我们成功读取了交通卡口数据,我们可以使用Python中的数据分析库,如Pandas和NumPy,来处理数据。这些库提供了丰富的函数和方法,可以对数据进行清洗、筛选、分组、聚合等操作。我们可以使用这些库来计算每个卡口的平均通行时间、最大通行速度等统计信息。我们还可以使用这些库来绘制数据的图表,如折线图、柱状图等,以便更直观地理解数据。 此外,Python还有一些专门用于地理数据处理的库,如Geopandas和Folium。这些库提供了地理数据的可视化和分析能力。我们可以使用这些库来绘制交通卡口的地理位置,分析不同地区的交通状况等。 最后,对于更复杂的交通卡口数据处理需求,可以使用Python中的机器学习和人工智能库,如Scikit-learn和TensorFlow。这些库提供了各种机器学习算法和深度学习模型,可以用于交通数据的预测、异常检测、模式识别等任务。 总之,Python是一种功能强大的编程语言,可以用来处理各种类型的数据,包括交通卡口数据。通过使用Python中的文件操作、数据分析、地理数据处理和机器学习库,我们可以对交通卡口数据进行清洗、分析、可视化和预测等多种处理操作
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值