智慧卡(Smart Card)是在信用卡尺寸塑膠卡片上嵌入晶片,具備資料儲存與運算能力。透過讀卡機即可存取卡內資料。其核心價值在於:
這兩大特性大幅提升交易便利性與安全性,廣泛應用於電信(SIM 卡)、金融(晶片金融卡)、運輸(悠遊卡/八達通)等領域。
| 類型 | 晶片架構 | 通訊協定 | 典型應用 |
|---|---|---|---|
| 接觸式記憶卡 | 無處理器,單純 EEPROM | 同步通訊 | IC 電話卡、預付儲值卡 |
| 接觸式 CPU 卡 | 含微處理器、作業系統 (COS) | 非同步通訊 (ISO 7816 T=0/T=1) | 金融卡、身分證、SIM 卡 |
| 非接觸式卡 | CPU + 射頻天線 | ISO 14443 Type A/B | 大眾運輸、門禁、行動支付 |
javacard.framework.Applet 的類別,實作 install()、process(APDU apdu)package com.example;
import javacard.framework.*;
public class HelloCard extends Applet {
private static final byte CLA_HELLO = (byte) 0xB0;
private static final byte INS_SAY_HELLO = (byte) 0x01;
private static final byte[] HELLO = "Hello Java Card!".getBytes();
public static void install(byte[] bArray, short bOffset, byte bLength) {
new HelloCard().register(bArray, (short) (bOffset + 1), bArray[bOffset]);
}
public void process(APDU apdu) {
if (selectingApplet()) return;
byte[] buffer = apdu.getBuffer();
if (buffer[ISO7816.OFFSET_CLA] != CLA_HELLO) ISOException.throwIt(ISO7816.SW_CLA_NOT_SUPPORTED);
if (buffer[ISO7816.OFFSET_INS] != INS_SAY_HELLO) ISOException.throwIt(ISO7816.SW_INS_NOT_SUPPORTED);
apdu.setOutgoing();
apdu.setOutgoingLength((short) HELLO.length);
apdu.sendBytesLong(HELLO, (short) 0, (short) HELLO.length);
}
}
Shareable 介面授權JCSystem.beginTransaction()) 確保原子性