vite-uni-dev-tool
Version:
vite-uni-dev-tool, debug, uni-app, 一处编写,到处调试
146 lines (131 loc) • 3.86 kB
text/typescript
// 创建一个 ArrayBuffer 并查看其值
export function transformArrayBuffer(buffer: ArrayBuffer): NFC.TransformId {
if (!buffer) {
return {
byteArray: [],
hexArray: [],
hexString: '',
};
}
// 将 ArrayBuffer 转为 Uint8Array(按字节读取)
const uint8Array = new Uint8Array(buffer);
// 方式1:转为普通数组
const byteArray = Array.from(uint8Array);
// console.log('ArrayBuffer 字节值(十进制):', byteArray);
// 方式2:转为十六进制(NFC 场景常用,因为 NFC 数据多以十六进制展示)
const hexArray = byteArray.map((byte) =>
byte.toString(16).padStart(2, '0').toUpperCase(),
);
const hexString = hexArray.join(':');
return {
byteArray,
hexArray,
hexString,
};
}
// 可以添加解析函数来解析 ATQA 信息
export function parseAtqa(atqaBuffer: ArrayBuffer) {
const uint8Array = new Uint8Array(atqaBuffer);
if (uint8Array.length < 2) return null;
const byte1 = uint8Array[0];
const byte2 = uint8Array[1];
return {
uidType: (byte1 >> 7) & 0x01, // UID 类型
storageSize: (byte1 >> 4) & 0x07, // 存储大小编码
manufacturer: byte1 & 0x0f, // 制造商代码
cardFeatures: (byte2 >> 4) & 0x0f, // 功能特性
reserved: byte2 & 0x0f, // 保留位
};
}
export function parseAtqaAndroid(atqa: number[]) {
const byte1 = atqa[0];
const byte2 = atqa[1];
return {
uidType: (byte1 >> 7) & 0x01, // UID 类型
storageSize: (byte1 >> 4) & 0x07, // 存储大小编码
manufacturer: byte1 & 0x0f, // 制造商代码
cardFeatures: (byte2 >> 4) & 0x0f, // 功能特性
reserved: byte2 & 0x0f, // 保留位
};
}
/**
* 获取 SAK 类型
*
* @export
* @param {number} sak
* @return {*}
*/
export function getSakType(sak: number) {
switch (sak) {
case 0x00:
return '未指定类型';
case 0x08:
return 'Mifare Classic 1K';
case 0x09:
return 'Mifare Classic Mini';
case 0x10:
return 'Mifare Plus';
case 0x11:
return 'Mifare Classic 4K';
case 0x18:
return 'Mifare Ultralight / Ultralight C';
case 0x20:
return 'DESFire';
default:
return '未知';
}
}
export function getSakHex(sak: number) {
return '0x' + (sak < 16 ? '0' : '') + sak.toString(16).toUpperCase();
}
/** 获取读写标准 */
export function getReadWriteStandard(nfcTypes: NFC.NfcType[]) {
return nfcTypes.map((nfcType) => {
switch (nfcType) {
case 'NFC-A':
case 'MIFARE Classic':
case 'MIFARE Ultralight':
return 'ISO 14443-3A';
case 'NFC-B':
return 'ISO 14443-3B';
case 'NFC-F':
return 'ISO 14443-3F';
case 'NFC-V':
return 'ISO 15693';
case 'Ndef':
return 'NDEF';
case 'ISO-DEP':
return 'ISO 14443-4';
case 'Ndef Formatable':
return 'NDEF Formatable';
default:
return '未知';
}
});
}
export function getAndroidTechs(techs: string[]) {
return techs.map((tech) => {
switch (tech) {
case 'android.nfc.tech.IsoDep':
return 'ISO-DEP';
case 'android.nfc.tech.MifareClassic':
return 'MIFARE Classic';
case 'android.nfc.tech.MifareUltralight':
return 'MIFARE Ultralight';
case 'android.nfc.tech.NfcA':
return 'NFC-A';
case 'android.nfc.tech.NfcB':
return 'NFC-B';
case 'android.nfc.tech.NfcF':
return 'NFC-F';
case 'android.nfc.tech.NfcV':
return 'NFC-V';
case 'android.nfc.tech.Ndef':
return 'Ndef';
case 'android.nfc.tech.NdefFormatable':
return 'Ndef Formatable';
default:
return '';
}
});
}