#
代码 POS显示的内容原因/操作员应采取的措施
00 交易成功 承兑或交易成功
01 交易失败 请联系发卡行 查发卡行
02 交易失败 请联系发卡行向发卡行查询
03 商户未登记 联系银行卡服务中心处理
04 没收卡 请联系收单行 操作员没收卡
05 交易失败 请联系发卡行 发卡不予承兑,与发银行联系查询
06 交易失败 请联系发卡行发卡行故障
07 没收卡 请联系收单行 特殊条件下没收卡
09 交易失败 请重试 重做该交易
12 交易失败 请重试 发卡行不支持的交易
13 交易金额超限 请重试交易金额无效,采用小金额交易或与发卡行联系
14 无效卡号 请联系发卡行无效卡号,与银行卡服务中心或发卡行联系
15 此卡不能受理 请与银行卡服务中心联系处理
19 交易失败 请联系发卡行 刷卡读取数据有误,重新刷卡
20 交易失败 请联系发卡行 与银行卡服务中心或发卡行联系
21 交易失败 请联系发卡行 与银行卡服务中心或发卡行联系
22 操作有误 请重试 POS状态与中心不符,重新签到
23 交易失败 请联系发卡行 不可接受的交易费
25 交易失败 请联系发卡行发卡行未能找到有关记录,核对有关资料重做该交易或与发卡行联系
30 交易失败 请重试 检查卡磁条是否完好或反方向刷卡
31 此卡不能受理 此发卡方未与中心开通业务
33 过期卡 请联系发卡行 过期的卡或与发卡行联系
34 没收卡 请联系收单行 有作弊嫌疑的卡,操作员可以没收
35 没收卡 请联系收单行 有作弊嫌疑的卡,操作员可以没收
36 此卡有误 请换卡重试 有作弊嫌疑的卡,操作员可以没收
37 没收卡 请联系收单行 有作弊嫌疑的卡,操作员可以没收
38 密码错误次数超限 密码输错的次数超限
39 交易失败 请联系发卡行 可能刷卡操作有误
40 交易失败 请联系发卡行 发卡行不支持的交易类型
41 没收卡 请联系收单行 挂失的卡,与发卡行联系处理
42 交易失败 请联系发卡方 发卡行找不到此帐户
43 没收卡 请联系收单行 被窃卡, 操作员可以没收
44 交易失败 请联系发卡行 可能刷卡操作有误
51 余额不足 请查询 帐户内余额不足
52 交易失败 请联系发卡行 无此支票账户
53 交易失败 请联系发卡行 无此储蓄卡账户
54 过期卡 请联系发卡行 过期的卡
55 密码错 请重试 密码输错,可重新输入
56 交易失败 请联系发卡行 发卡行找不到此帐户,与发卡行联系
57 交易失败 请联系发卡行不允许持卡人进行的交易,与发卡行联系
58 终端无效 请联系收单行或银联重新签到再试或与银行卡服务中心联系
59 交易失败 请联系发卡行 与发卡行联系
60 交易失败 请联系发卡行 与发卡行联系
61 金额太大 超出去款金额限制
62 交易失败 请联系发卡行 受限制的卡
63 交易失败 请联系发卡行 违反安全保密规定
64 交易失败 请联系发卡行原始金额不正确,核对原始资料或与发卡行联系
65 超出取款次数限制 超出取款次数限制
66 交易失败 请联系收单行或银联 与发卡放联系处理
67 没收卡 没收卡
68 交易超时 请重试发卡行规定时间内没有应答,与银行卡服务中心或发卡行联系
75 密码错误次数超限允许的输入PIN次数超限 该卡要重置密码方能使用
77 请向网络中心签到 重做签到
79 POS终端重传脱机数据 POS终端上传的脱机数据对帐不平
90 交易失败 请稍后重试日期切换正在处理,与银行卡服务中心或发卡行联系
91 交易失败 请稍后重试 电话查询发卡方或银联,可重作
92 交易失败 请稍后重试银行通讯故障,电话查询发卡方或网络中心
93 交易失败 请联系发卡行 交易违法、不能完成。重新签到后再试
94 交易失败 请稍后重试重新签到后再交易或与银行卡服务中心联系
95 交易失败 请稍后重试发卡行调节控制错,与发卡行联系
96 交易失败 请稍后重试 与发卡行或银行卡服务中心联系
97 终端未登记 请联系收单行或银联与银行卡服务中心联系
98 交易超时 请重试银联收不到发卡行应答,与银行卡服务中心或发卡行联系
99 校验错 请重新签到 重新签到再作交易
A0 校验错 请重新签到 重新签到作交易
摘要: POS机的主要功能点: 1. 签到 2. 输入密码 3. 消费 4. 余额查询 5. 撤销 6. 系统设置 我公司建议: 1:为统一格式及今后扩展,近可能按照银联标准开发: 2:增加“批结算”功能; 3:建议把卡号信息写在磁条卡“2磁道”; 4:报文格式: TPDU(10字节) + 报文头(12字节)+ 消息类型(4字节)+ 位图(8字节)+位图保护...
阅读全文
-------------------------------------
MyEclipse 快捷键1(CTRL)
-------------------------------------
Ctrl+1 快速修复
Ctrl+D: 删除当前行
Ctrl+Q 定位到最后编辑的地方
Ctrl+L 定位在某行
Ctrl+O 快速显示 OutLine
Ctrl+T 快速显示当前类的继承结构
Ctrl+W 关闭当前Editer
Ctrl+K 快速定位到下一个
Ctrl+E 快速显示当前Editer的下拉列表
Ctrl+J 正向增量查找(按下Ctrl+J后,你所输入的每个字母编辑器都提供快速匹配定位到某个单词,如果没有,则在stutes line中显示没有找到了,)
Ctrl+Z 返回到修改前的状态
Ctrl+Y 与上面的操作相反
Ctrl+/ 注释当前行,再按则取消注释
Ctrl+D删除当前行。
Ctrl+Q跳到最后一次的编辑处
Ctrl+M切换窗口的大小
Ctrl+I格式化激活的元素Format Active Elements。
Ctrl+F6切换到下一个Editor
Ctrl+F7切换到下一个Perspective
Ctrl+F8切换到下一个View
------------------------------------------
MyEclipse 快捷键2(CTRL+SHIFT)
------------------------------------------
Ctrl+Shift+E 显示管理当前打开的所有的View的管理器(可以选择关闭,激活等操作)
Ctrl+Shift+/ 自动注释代码
Ctrl+Shift+\自动取消已经注释的代码
Ctrl+Shift+O 自动引导类包
Ctrl+Shift+J 反向增量查找(和上条相同,只不过是从后往前查)
Ctrl+Shift+F4 关闭所有打开的Editer
Ctrl+Shift+X 把当前选中的文本全部变为小写
Ctrl+Shift+Y 把当前选中的文本全部变为小写
Ctrl+Shift+F 格式化当前代码
Ctrl+Shift+M(先把光标放在需导入包的类名上) 作用是加Import语句
Ctrl+Shift+P 定位到对于的匹配符(譬如{}) (从前面定位后面时,光标要在匹配符里面,后面到前面,则反之)
Ctrl+Shift+F格式化文件Format Document。
Ctrl+Shift+O作用是缺少的Import语句被加入,多余的Import语句被删除。
Ctrl+Shift+S保存所有未保存的文件。
Ctrl+Shift+/ 在代码窗口中是这种/*~*/注释,在JSP文件窗口中是 <!--~-->。
Shift+Ctrl+Enter 在当前行插入空行(原理同上条)
-----------------------------------------
MyEclipse 快捷键3(ALT)
-----------------------------------------
Alt+/ 代码助手完成一些代码的插入 ,自动显示提示信息
Alt+↓ 当前行和下面一行交互位置(特别实用,可以省去先剪切,再粘贴了)
Alt+↑ 当前行和上面一行交互位置(同上)
Alt+← 前一个编辑的页面
Alt+→ 下一个编辑的页面(当然是针对上面那条来说了)
Alt+Enter 显示当前选择资源(工程,or 文件 or文件)的属性
MyEclipse 快捷键4(ALT+CTRL)
Alt+CTRL+↓ 复制当前行到下一行(复制增加)
Alt+CTRL+↑ 复制当前行到上一行(复制增加)
-------------------------------------------
MyEclipse 快捷键5(ALT+SHIFT)
-------------------------------------------
Alt+Shift+R 重命名
Alt+Shift+M 抽取方法
Alt+Shift+C 修改函数结构(比较实用,有N个函数调用了这个方法,修改一次搞定)
Alt+Shift+L 抽取本地变量
Alt+Shift+F 把Class中的local变量变为field变量
Alt+Shift+I 合并变量
Alt+Shift+V 移动函数和变量
Alt+Shift+Z 重构的后悔药(Undo) Shift+Enter 在当前行的下一行插入空行(这时鼠标可以在当前行的任一位置,不一定是最后)
Alt+Shift+O(或点击工具栏中的Toggle Mark Occurrences按钮) 当点击某个标记时可使本页面中其他地方的此标记黄色凸显,并且窗口的右边框会出现白色的方块,点击此方块会跳到此标记处。
下面的快捷键是重构里面常用的,本人就自己喜欢且常用的整理一下(注:一般重构的快捷键都是Alt+Shift开头的了)
--------------------------------------------
MyEclipse 快捷键(6)
--------------------------------------------
F2当鼠标放在一个标记处出现Tooltip时候按F2则把鼠标移开时Tooltip还会显示即Show Tooltip Description。
F3跳到声明或定义的地方。
F5单步调试进入函数内部。
F6单步调试不进入函数内部,如果装了金山词霸2006则要把“取词开关”的快捷键改成其他的。
F7由函数内部返回到调用处。
F8一直执行到下一个断点。
Java对象的持久化主要使用
ObjectInputStream与ObjectOutputStream类 来实现!
public class Student implements Serializable {
String name;
int id ;
int age;
String department;
public Student(String name, int id, int age, String department) {
this.age = age;
this.department = department;
this.id = id;
this.name = name;
}
public static void saveObjects(Student student, String fileName) {
FileOutputStream os = new FileOutputStream("fileName.dat");
ObjectOutputStream oos = new ObjectOutputStream(os);
oos.writeObject(student);
}
public static Student readObjects(String fileName) {
Student student;
Object obj;
try{
FileInputStream is = new FileInputStream("fileName.dat");
ObjectInputStream ois = new ObjectInputStream(is);
obj = ois.readObject();
}catch (Exception e) {
e.printStackTrace();
}
if(obj instanceof Student){
Student stu= (Student)obj;
return stu;
}
return null;
}
JAVA获取文件绝对路径:Thread.currentThread().getContextClassLoader().getResource("abc.properties");
配置文件:XXX.properties 常用操作
1:加载properties配置文件 /** * 根据key从Properties对象中得到相应的值
* @param key
* @return 对应的值
*/ public static String getValue(String key) {
if (p !=
null) {
return p.getProperty(key);
}
String property =
null;
InputStream in =
null;
try {
System.out.println("gleepay.properties is path : " + gleepayURL.getFile());
File file =
new File(gleepayURL.getFile());
in =
new FileInputStream(file);
p =
new Properties();
p.load(in);
property = p.getProperty(key);
}
catch (FileNotFoundException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}
finally {
if (in !=
null) {
try {
in.close();
}
catch (IOException e) {
e.printStackTrace();
}
}
}
return property;
}
2:写入propertis配置信息/**
* 写入properties信息
* @param parameterKey
* @param parameterValue
*
* @return
*/
public static void writeProperties_MACkey(String parameterKey, String parameterValue) {
String filePath = MACkeyURL.getFile();
Properties prop = new Properties();
try {
InputStream fis = new FileInputStream(filePath);
// 从输入流中读取属性列表(键和元素对)
prop.load(fis);
// 调用 Hashtable 的方法 put。使用 getProperty 方法提供并行性。
// 强制要求为属性的键和值使用字符串。返回值是 Hashtable 调用 put 的结果。
OutputStream fos = new FileOutputStream(filePath);
prop.setProperty(parameterKey, parameterValue);
// 以适合使用 load 方法加载到 Properties 表中的格式,
// 将此 Properties 表中的属性列表(键和元素对)写入输出流
prop.store(fos, "Update '" + parameterKey + "' value");
} catch (IOException e) {
System.err.println("Visit " + filePath + " for updating "
+ parameterKey + " value error");
e.printStackTrace();
}
}
3:根据key读取propertis文件value值
/**
* 根据key读取value
* @param filePath
* @param key
* @return 对应的值
*/
public static String readValueByKey(String filePath, String key) {
System.out.println("properties file is path : " + filePath);
Properties props = new Properties();
try {
InputStream in = new BufferedInputStream(new FileInputStream(filePath));
props.load(in);
String value = props.getProperty(key);
System.out.println(" --> " + key + "=" + value);
return value;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
4:读取properties配置文件所有信息
/**
* 读取properties的全部信息
* @param filePath
* @return
*/
@SuppressWarnings("unchecked")
public static void readPropertiesAll(String filePath) {
System.out.println("properties file is path : " + filePath);
Properties props = new Properties();
try {
InputStream in = new BufferedInputStream(new FileInputStream(filePath));
props.load(in);
Enumeration en = props.propertyNames();
while (en.hasMoreElements()) {
String key = (String) en.nextElement();
String Property = props.getProperty(key);
System.out.println(" --> " + key + "=" + Property);
}
} catch (Exception e) {
e.printStackTrace();
}
}
摘要: JAVA 对象拷贝 为什么需要有对象拷贝? 对象拷贝相对的自然是引用拷贝。java初学者经常会问,我这个方法要改变一个对象的属性,可以把参数传进去了,为什么没有改变了? ——基本数据类型传值,而对象传引用或引用的拷贝。 而有时候我们要获取到一个当前状态的对象复制品,他们是两个独立对象。不再是引用或者引用拷贝(实质都是指向对象本身)。就是说a是b的拷贝,b发生变化的时候,不要...
阅读全文
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Enumeration;
import java.util.Properties;
public class TestMain {
//根据key读取value
public static String readValue(String filePath,String key) {
Properties props = new Properties();
try {
InputStream in = new BufferedInputStream (new FileInputStream(filePath));
props.load(in);
String value = props.getProperty (key);
System.out.println(key+value);
return value;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
//读取properties的全部信息
public static void readProperties(String filePath) {
Properties props = new Properties();
try {
InputStream in = new BufferedInputStream (new FileInputStream(filePath));
props.load(in);
Enumeration en = props.propertyNames();
while (en.hasMoreElements()) {
String key = (String) en.nextElement();
String Property = props.getProperty (key);
System.out.println(key+Property);
}
} catch (Exception e) {
e.printStackTrace();
}
}
//写入properties信息
public static void writeProperties(String filePath,String parameterName,String parameterValue) {
Properties prop = new Properties();
try {
InputStream fis = new FileInputStream(filePath);
//从输入流中读取属性列表(键和元素对)
prop.load(fis);
//调用 Hashtable 的方法 put。使用 getProperty 方法提供并行性。
//强制要求为属性的键和值使用字符串。返回值是 Hashtable 调用 put 的结果。
OutputStream fos = new FileOutputStream(filePath);
prop.setProperty(parameterName, parameterValue);
//以适合使用 load 方法加载到 Properties 表中的格式,
//将此 Properties 表中的属性列表(键和元素对)写入输出流
prop.store(fos, "Update '" + parameterName + "' value");
} catch (IOException e) {
System.err.println("Visit "+filePath+" for updating "+parameterName+" value error");
}
}
public static void main(String[] args) {
readValue("info.properties","url");
writeProperties("info.properties","age","21");
readProperties("info.properties" );
System.out.println("OK");
}
}
今天介绍的Scanner这个类是java 5新增加的类,不仅使用方便,功能更是强大。先来看一个简单的例子:
import java.util.*;
public class ScannerTest {
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
double a=scanner.nextDouble();
System.out.println(a);
}
} 运行
输入 一个任意数然后输出这个数
注意粗体字的地方,这一行就实现了从控制台输入数字的功能,如果要输入字符串
可以用
String a=scanner.next();//注意不是nextString()
Scanner还可以直接扫描文件。比如(有点长,耐心一点):
import java.util.*;
import java.io.*;
public class ScannerTest {
public static void main(String[] args) throws IOException{//这里涉及到文件io操作
double sum=0.0;
int count=0;
FileWriter fout=new FileWriter("text.txt");
fout.write("2 2.2 3 3.3 4 4.5 done");//往文件里写入这一字符串
fout.close();
FileReader fin=new FileReader("text.txt");
Scanner scanner=new Scanner(fin);//注意这里的参数是FileReader类型的fin
while(scanner.hasNext()){//如果有内容
if(scanner.hasNextDouble()){//如果是数字
sum=sum+scanner.nextDouble();
count++;
}else{
String str=scanner.next();
if(str.equals("done")){
break;
}else{
System.out.println("文件格式错误!");
return;