8583 55

news/2024/10/31 3:19:48/
public class Field55Test {private static final String LINE_SP = System.getProperty("line.separator");//测试报文55域public static final byte[] BYTES = new byte[] { (byte) 0x9F, 0x10, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, (byte) 0x9A, 0x03, 0x11,0x12,0x08, //(byte) 0x9C, 0x01, 0x00, (byte) 0x9F, 0x02, 0x06, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x5F, 0x2A,0x02,0x01, //0x11, 0x71, (byte) 0x81, (byte) 0xC8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, //0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };//获取55域中的TAGprivate static byte[] getTag(int index, byte[] source) {byte tag1 = source[index];if ((tag1 & 0x1f) == 0x1f) {return new byte[] { source[index], source[index + 1] };} else {return new byte[] { source[index] };}}//获取域名中得TAG长度private static byte[] getLen(int index, byte[] source) {byte len1 = source[index];if ((len1 & 0x80) == 0x00) {return new byte[] { source[index] };} else {byte len2 = (byte) (len1 & 0x7f);len2++;byte[] len = new byte[len2];System.arraycopy(source, index, len, 0, len2);return len;}}//获取55域中得TAG值private static byte[] getValue(int index, byte[] source, int len) {byte[] value = new byte[len];System.arraycopy(source, index, value, 0, len);return value;}static void printHex(byte[] bytes) {String info = "";for (int i = 0; i < bytes.length; i++) {String s = Integer.toHexString(bytes[i] < 0 ? bytes[i] + 256 : bytes[i]);if (s.length() == 1) {s = "0" + s;}info += s;info += " ";if ((i + 1) % 16 == 0) {info += LINE_SP;}}System.out.print(info);}/*** @param args*/public static void main(String[] args) {int index = 0;//循环读取所有TAGwhile (index < BYTES.length) {byte[] tag = getTag(index, BYTES);index += tag.length;byte[] len = getLen(index, BYTES);index += len.length;int iLen;if (len.length == 1) {iLen = len[0];} else {iLen = len[1] < 0 ? len[1] + 256 : len[1];}byte[] val = getValue(index, BYTES, iLen);index += val.length;System.out.print("tag:");printHex(tag);System.out.print("len:");printHex(len);System.out.print("val:");printHex(val);System.out.println();}}
}


/** * 银联55域 *  * 本域将根据不同的交易种类包含不同的子域。银联处理中心仅在受理方和发卡方之间传递这些适用于IC卡交易的特有数据,而不对它们进行任何修改和处理。 * 为适应该子域需要不断变化的情况 * ,本域采用TLV(tag-length-value)的表示方式,即每个子域由tag标签(T),子域取值的长度(L)和子域取值(V)构成。 * tag标签的属性为bit * ,由16进制表示,占1~2个字节长度。例如,"9F33"为一个占用两个字节的tag标签。而"95"为一个占用一个字节的tag标签 * 。若tag标签的第一个字节 * (注:字节排序方向为从左往右数,第一个字节即为最左边的字节。bit排序规则同理。)的后五个bit为"11111",则说明该tag占两个字节 * ,例如"9F33";否则占一个字节,例如"95"。 子域长度(即L本身)的属性也为bit,占1~3个字节长度。具体编码规则如下: a) * 当L字段最左边字节的最左bit位(即bit8)为0,表示该L字段占一个字节,它的后续7个bit位(即bit7~bit1)表示子域取值的长度, * 采用二进制数表示子域取值长度的十进制数 * 。例如,某个域取值占3个字节,那么其子域取值长度表示为"00000011"。所以,若子域取值的长度在1~127 * 字节之间,那么该L字段本身仅占一个字节。 b) * 当L字段最左边字节的最左bit位(即bit8)为1,表示该L字段不止占一个字节,那么它到底占几个字节由该最左字节的后续7个bit位 * (即bit7~bit1)的十进制取值表示。例如,若最左字节为10000010,表示L字段除该字节外,后面还有两个字节。其后续字节 * 的十进制取值表示子域取值的长度。例如,若L字段为"1000 0001 1111 1111",表示该子域取值占255个字节。 * 所以,若子域取值的长度在128~255字节之间,那么该L字段本身需占两个字节 *  */



http://www.ppmy.cn/news/154975.html

相关文章

masm5.0与masm32

不要把MASM32开发环境和MASM汇编器版本搞混了&#xff01; MASM32 是一个为那些对学习或者编写 32 位微软汇编&#xff08; MASM &#xff09;感兴趣 的程序员提供的工作环境&#xff0c;它最流行的版本是 8.0 版&#xff0c;而我所知道最新版本是 9.0 版。但是请大家一定要注…

am5728开始。。。

从今天起本人将正式把自己学习5728的过程连载在这里&#xff0c;希望自己可以坚持下去 现在张自己画的PCB&#xff0c;核心板买的创龙的&#xff0c;无奈底板太贵&#xff0c;本人的工资已经拖了全世界后腿了 简单介绍下硬件&#xff1a;参照TI IDK设计。4网口&#xff08;2路…

b丅151组成的充电器电路_BT151S-500R118

品牌&#xff1a;WeEn Semiconductors 描述&#xff1a;THYRISTOR 500V 12A DPAK 详细描述&#xff1a;SCR 650V 12A Standard Recovery Surface Mount DPAK 制造商&#xff1a;WeEn Semiconductors 系列&#xff1a;- 包装&#xff1a;带卷(TR) 零件状态&#xff1a;在售 电压…

【MM系列】MB1A MB1B MB1C MB11 MIGO的区别解析

公众号&#xff1a; SAP Technical 本文作者&#xff1a; matinal 原文出处&#xff1a; http://www.cnblogs.com/SAPmatinal/ 原文链接&#xff1a; 【MM系列】MB1A MB1B MB1C MB11 MIGO的区别解析 前言部分 大家可以关注我的公众号&#xff0c;公众号里的排版更好&#xff0…

FMC168-8通道250Msps 16位ADC FMC子卡

板卡介绍 FMC168是一款具有8通道模数转换器&#xff08;ADC&#xff09;的FMC卡&#xff0c;具有16bit分辨率&#xff0c;最大采样速率达250Msps。时钟配置芯片为AD9517&#xff0c;可由板载时钟提供参考&#xff0c;也可由外部时钟提供。FMC168采用HPC连接器&#xff0c;输入…

驱动PCF8591模拟电压表

51驱动PCF8591制作电压表 PCF8591模组介绍模块引脚及原理图具体地址和控制字节具体程序流程具体效果可参考下图 小结 原文链接&#xff1a;https://www.yourcee.com/newsinfo/2928811.html PCF8591模组介绍 PCF8591是单片&#xff0c;单电源低功耗8位CMOS数据采集期间&#x…

MW80 DM RGB 蓝牙5.2双模热插拔PCB

键盘使用说明索引&#xff08;均为出厂默认值&#xff09; 软件支持一些常见问题解答&#xff08;FAQ&#xff09;电池开关电池插座首次使用测试步骤蓝牙配对规则&#xff08;重要&#xff09;蓝牙和USB切换键盘默认层默认触发层0的FN键配置的功能默认功能层1配置的功能默认的快…

1553B总线介绍

一、 1553B诞生背景: 1553B总线是MIL-STD-1553总线的简称,MIL-STD-1553总线是时分制命令/响应式多路复用数据总线。主要应用在海陆空等军事装备和航天领域。美国SAE A2K委员会在军方和工业界的支持下于1968年决定开发标准的信号多路传输系统,并于1973年公布了MIL-STD-1553标…