磁条卡磁道笔记(2)
上一篇文章 磁条卡磁道笔记(1)之后,现在接着具体讲讲三个磁道的数据解析代码。没错,本文只是代码……单纯的代码……
1、第1磁道数据
 public void fromByteArray(byte[] buffer, int offset, int byteCount) {/* Check the parameters. */if ((buffer == null) || (offset < 0) || (byteCount < 0)|| (offset + byteCount > buffer.length)) {return;}init();int index = 0;char track1Jis2Char = 0;char track1Char = 0;Track1State state = Track1State.START;int charCount = 0;/* Convert the byte to character. */for (index = 0; index < byteCount; index++) {track1Jis2Char = (char) (buffer[offset + index] & 0x7F);track1Char = TRACK1_CHAR_TABLE[buffer[offset + index] & 0x3F];mTrack1data += track1Char;switch (state) {case START:if (buffer[offset + index] == (byte) 0xFF) {state = Track1State.JIS2_DATA;} else {if (track1Char == START_SENTINEL) {state = Track1State.FORMAT_CODE;}}break;case JIS2_DATA:if (buffer[offset + index] == (byte) 0xFF) {state = Track1State.END;} else {mJis2Data += Character.isISOControl(track1Jis2Char) ? ' ': track1Jis2Char;}break;case FORMAT_CODE:state = Track1State.PRIMARY_ACCOUNT_NUMBER;break;case PRIMARY_ACCOUNT_NUMBER:if (track1Char == FIELD_SEPARATOR) {state = Track1State.NAME;} else {mPrimaryAccountNumber += track1Char;}break;case NAME:if (track1Char == FIELD_SEPARATOR) {charCount = 4;state = Track1State.EXPIRATION_DATE;} else {mName += track1Char;}break;case EXPIRATION_DATE:mExpirationDate += track1Char;charCount--;if (charCount <= 0) {charCount = 3;state = Track1State.SERVICE_CODE;}break;case SERVICE_CODE:mServiceCode += track1Char;charCount--;if (charCount <= 0) {state = Track1State.DISCRETIONARY_DATA;}break;case DISCRETIONARY_DATA:if (track1Char == END_SENTINEL) {state = Track1State.END;} else {mDiscretionaryData += track1Char;}break;default:break;}}}

2、第2磁道数据

 public void fromByteArray(byte[] buffer, int offset, int byteCount) {/* Check the parameters. */if ((buffer == null) || (offset < 0) || (byteCount < 0)|| (offset + byteCount > buffer.length)) {return;}init();int index = 0;char track2Char = 0;Track2State state = Track2State.START;int charCount = 0;/* Convert the byte to character. */for (index = 0; index < byteCount; index++) {track2Char = TRACK2_CHAR_TABLE[buffer[offset + index] & 0x0F];mTrack2data += track2Char;switch (state) {case START:if (track2Char == START_SENTINEL) {state = Track2State.PRIMARY_ACCOUNT_NUMBER;}break;case PRIMARY_ACCOUNT_NUMBER:if (track2Char == FIELD_SEPARATOR) {charCount = 4;state = Track2State.EXPIRATION_DATE;} else {mPrimaryAccountNumber += track2Char;}break;case EXPIRATION_DATE:mExpirationDate += track2Char;charCount--;if (charCount <= 0) {charCount = 3;state = Track2State.SERVICE_CODE;}break;case SERVICE_CODE:mServiceCode += track2Char;charCount--;if (charCount <= 0) {state = Track2State.DISCRETIONARY_DATA;}break;case DISCRETIONARY_DATA:if (track2Char == END_SENTINEL) {state = Track2State.END;} else {mDiscretionaryData += track2Char;}break;default:break;}}}

3、第3磁道数据

public void fromByteArray(byte[] buffer, int offset, int byteCount) {/* Check the parameters. */if ((buffer == null) || (offset < 0) || (byteCount < 0)|| (offset + byteCount > buffer.length)) {return;}init();int index = 0;char track3Char = 0;Track3State state = Track3State.START;int charCount = 0;/* Convert the byte to character. */for (index = 0; index < byteCount; index++) {track3Char = TRACK3_CHAR_TABLE[buffer[offset + index] & 0x0F];mTrack3data += track3Char;switch (state) {case START:if (track3Char == START_SENTINEL) {charCount = 2;state = Track3State.FORMAT_CODE;}break;case FORMAT_CODE:charCount--;if (charCount <= 0) {state = Track3State.PRIMARY_ACCOUNT_NUMBER;}break;case PRIMARY_ACCOUNT_NUMBER:if (track3Char == FIELD_SEPARATOR) {charCount = 3;state = Track3State.COUNTRY_CODE;} else {mPrimaryAccountNumber += track3Char;}break;case COUNTRY_CODE:mCountryCode += track3Char;charCount--;if (charCount <= 0) {charCount = 3;state = Track3State.CURRENCY_CODE;}break;case CURRENCY_CODE:mCurrencyCode += track3Char;charCount--;if (charCount <= 0) {state = Track3State.AMOUNT_INDEX;}break;case AMOUNT_INDEX:mAmountIndex += track3Char;charCount = 4;state = Track3State.PERIOD_AUTHORITY;break;case PERIOD_AUTHORITY:mPeriodAuthority += track3Char;charCount--;if (charCount <= 0) {charCount = 4;state = Track3State.PERIOD_BALANCE;}break;case PERIOD_BALANCE:mPeriodBalance += track3Char;charCount--;if (charCount <= 0) {charCount = 4;state = Track3State.PERIOD_BEGIN_DATE;}break;case PERIOD_BEGIN_DATE:mPeriodBeginDate += track3Char;charCount--;if (charCount <= 0) {charCount = 2;state = Track3State.PERIOD_LENGTH;}break;case PERIOD_LENGTH:mPeriodLength += track3Char;charCount--;if (charCount <= 0) {state = Track3State.PSW_INPUT_TIMES;}break;case PSW_INPUT_TIMES:mPswInputTimes += track3Char;charCount = 6;state = Track3State.P_AUTHORITY_CODE;break;case P_AUTHORITY_CODE:mPAuthorityCode += track3Char;charCount--;if (charCount <= 0) {state = Track3State.EXCHANGE_CONTROL_CODE;}break;case EXCHANGE_CONTROL_CODE:mExchangeControlCode += track3Char;charCount = 2;state = Track3State.PAN_TA_SR;break;case PAN_TA_SR:mPanTaSr += track3Char;charCount--;if (charCount <= 0) {charCount = 2;state = Track3State.SAN_1_TA_SR;}break;case SAN_1_TA_SR:mSan1TaSr += track3Char;charCount--;if (charCount <= 0) {charCount = 2;state = Track3State.SAN_2_TA_SR;}break;case SAN_2_TA_SR:mSan2TaSr += track3Char;charCount--;if (charCount <= 0) {charCount = 4;state = Track3State.EXPIRATION_DATE;}break;case EXPIRATION_DATE:mExpirationDate += track3Char;charCount--;if (charCount <= 0) {state = Track3State.SERIAL_NUMBER;}break;case SERIAL_NUMBER:mSerialNumber += track3Char;state = Track3State.CODE_NUMBER;break;case CODE_NUMBER:mCodeNumber += track3Char;state = Track3State.SAN_1;break;case SAN_1:if (track3Char == FIELD_SEPARATOR) {state = Track3State.SAN_2;} else {mSan1 += track3Char;}break;case SAN_2:if (track3Char == FIELD_SEPARATOR) {state = Track3State.PASS_MARK;} else {mSan2 += track3Char;}break;case PASS_MARK:mPassMark += track3Char;charCount = 6;state = Track3State.CRYPTOGRAPHIC_CHECK_DIGIT;break;case CRYPTOGRAPHIC_CHECK_DIGIT:mCryptographicCheckDigit += track3Char;charCount--;if (charCount <= 0) {state = Track3State.DISCRETIONARY_DATA;}break;case DISCRETIONARY_DATA:if (track3Char == END_SENTINEL) {state = Track3State.END;} else {mDiscretionaryData += track3Char;}break;default:break;}}}

PS:具体代码还是看这里-> 点我点我点我

磁条卡磁道笔记(2)相关推荐

  1. 磁条卡磁道数据格式检测指南

    控制编号:CBMF-20602 磁条卡磁道数据格式检测指南 2006年10月 银行卡检测中心 目 录 1. 检测标准.......................................... ...

  2. 磁条卡磁道2的等效数据

    -此数据必须存在并提供给终端,终端在读应用数据过程中,如果没有读到必备数据,终端中止交易. 按GB/T 17552,磁条2的数据.不包括起始位.结束位和LRC(验证码),包括: 1)   应用主账号( ...

  3. 根据二磁道数据识别是IC卡还是磁条卡

    根据二磁道=符号后面第五位识别.规则是 该数字 ==6 或者 ==2  则该卡是IC卡,否则是普通磁条卡

  4. 光盘、软盘、硬盘、U盘、磁条卡、芯片卡和复合卡之间的区别与联系

    文章目录 一.光盘.软盘.硬盘和U盘的区别 二.磁条卡.芯片卡和复合卡的区别 三.联系都在粗体里 一.光盘.软盘.硬盘和U盘的区别 光盘.软盘和硬盘都是计算机存储介质,它们的主要区别在于存储容量.读写 ...

  5. 《银行磁条卡销售点终端规范》

    [发布单位]中国人民银行   [发布文号]-----------   [发布日期]2001-03-30   [生效日期]2001-05-01   [失效日期]----------   [所属类别]国家 ...

  6. AAMVA标准磁条卡泰国车载读卡器|刷卡机MSR100-D1-3性能与应用领域

    MSR100-D1-3是一款 AAMVA标准,支持GPS通讯的全三轨磁条卡.磁条驾驶证读卡设备.以串AAMVA标准磁条卡泰国车载读卡器|刷卡机MSR100-D1-3采用RS232通讯接口,采用2*2 ...

  7. YD647全三轨磁条卡读写器性能与使用说明

    YD647全三轨磁条卡读写器是华翔天诚科技提供的一款用于读取/写入高/低抗娇顽力磁条的写磁设备.它可以读/写磁条全三轨道的数据.它与电脑主机或其他终端连接有:1.标准RS-232接口:2.USB接口. ...

  8. IC卡与磁条卡的数据区别

    银联交易中IC卡和磁条卡在数据组装中的区别 1:IC卡必须要有IC卡数据域[55域] 2:服务点输入方式码[以含PIN为例]:IC卡默认为051,磁条卡默认为021[22域] 3:IC卡有IC卡条件码 ...

  9. 【历史上的今天】7 月 4 日:第一本电子书问世;磁条卡的发明者出生;掌上电脑先驱诞生

    整理 | 王启隆 透过「历史上的今天」,从过去看未来,从现在亦可以改变未来. 今天是 2022 年 7 月 4 日,在 1998 年的今天,美国"火星探路者"宇宙飞船经过 4 亿多 ...

最新文章

  1. pip 20.3 新版本发布!即将抛弃 Python 2.x
  2. 在js对象上绑定js数组原生方法
  3. 10个凭证类型的速记
  4. 【云炬大学生创业基础笔记】第1章第1节 创新和创业有什么样的关系?
  5. c语言指针心得6,c语言指针的学习心得
  6. SAP Analytics Cloud里的Smart Insight功能介绍
  7. Android应用实现文件关联
  8. 程序设计基础c语言第二版巫,程序设计基础 (C语言)---2版
  9. 机器学习之 weka学习(三)
  10. linux 部署php svn,Linux服务器搭建svn环境方法详解
  11. 关于openstack,cloudstack,Eucalyptus对比分析
  12. SpringBoot:整合Solr
  13. 常见信息安全威胁与经典案例
  14. android 文本倒影,Android 生成倒影图片
  15. 小米强制淘汰老破小,苹果华为带了好头
  16. GPU运算能力对比(详细)
  17. labview学习笔记1-数字输入与输出
  18. 【正点原子I.MX6U-MINI】修改开机内核Logo和进度条界面Logo(一)
  19. 从程序员的观点看 汉字国标与Unicode
  20. 在 Ubuntu 中与手机发送文件不方便,怎么让手机和 Ubuntu 远程建立连接,传输文件?

热门文章

  1. 计算机按键不灵怎么回事,电脑键盘失灵,教您电脑键盘失灵怎么办
  2. NOI2018 冒泡排序规律证明
  3. 程序员工资一般多少钱一个月?【推荐】
  4. 计算机系统的主要部件和功能,《计算机系统的组成》教案
  5. 电脑白屏,电脑白屏怎么办
  6. 俄亥俄州立大学计算机专业排名,俄亥俄州立大学CS专业排名2020年
  7. python二级成绩查询入口官网_python爬虫实战之模拟正方教务系统登录查询成绩
  8. excel链接隐藏工作表_在Excel 2007和2010中隐藏和取消隐藏工作表和工作簿
  9. html中怎麼添加箭头,html – 向滚动条添加箭头
  10. 2022年新一代最强开源UI自动化测试神器 ——Playwright(三)