转 : Squareup刷卡器,音频读卡识别android/iOS源码API

转  :   Squareup刷卡器,音频读卡识别android/iOS源码API



相信很多人已经见过squareup的读卡器了,银行磁卡在该读卡器上一刷,则能从手机中获取银行卡磁道的信息。

SquareUp读卡器在iphone上的应用

SquareUp读卡器在iPhone上的应用

我最近开发了一个适应手机非常广阔的读卡器API,刷卡时,能读取出二磁道信息(利用squareup读卡器,中国大陆大部分模仿者采用的读卡器原理与此相同,就像一个磁带机的磁头,成本低廉),并且能给出所有反馈细节。

该API源码包括了许多滤波器与数字信号处理知识,如果单独从头写,对于程序员来说,不免还是有点太耽误时间了,对于一个人来说,要做到这些,少说也得半个月。我开发这个API,其实从第一版本到大量测试结束后,差不多也用了两个多月,主要的工作量都来自于优化算法以及磁卡识别率。

再来说说API的功能,主要是反馈信息,例如,刷卡过快,刷卡过慢,刷卡不正,读卡器插入,读卡器拔出等等。该API适应手机范围基本囊括了支持以下标准的所有山寨机和品牌手机。

标准:

手机支持耳机音频麦克风输入,带宽大于50Hz-15kHz。

手机系统Android版本大于2.2,api支持2.2~4.0所有版本

下面是一段使用api的代码实例:

01 /**
02  * CardReaderBaseActivity 是一个api提供的activity简单封装
03  * 我们可以从这个类派生一个Acitivity,也可以模拟CardReaderBaseActivity写一个属于自己的功能更强大的类
04  * API的所有精华来自另一个被封装到这个类里面的类,@see CardReader
05  */
06 public class CardAPIActivity extends CardReaderBaseActivity {
07  
08     private ImageView img;
09     private TextView txt;
10     /** Called when the activity is first created. */
11     @Override
12     public void onCreate(Bundle savedInstanceState) {
13         super.onCreate(savedInstanceState);
14         setContentView(R.layout.main);
15         img = (ImageView)findViewById(R.id.indicator);
16         txt = (TextView)findViewById(R.id.feedback);
17     }
18  
19     @Override
20     protected void handlePlugIn() {
21         // 读卡器插入
22         img.setImageResource(R.drawable.indicator);
23         txt.setText("");
24     }
25  
26     @Override
27     protected void handlePlugOut() {
28         // 读卡器拔出
29         img.setImageResource(R.drawable.indicator_off);
30         txt.setText("");
31     }
32  
33     @Override
34     protected void handleCardNumber(String CardNumber) {
35         // 当解析完一张磁卡后,返回该卡号
36         super.handleCardNumber(CardNumber); // this will call vibrate
37         // ci is a protected cardinfo variable of CardReaderBaseActivity,包含了第二磁道所有信息
38         txt.setText("卡号:"+CardNumber+"\n第二磁道原始数据:\n"+ci.toString());
39     }
40  
41     @Override
42     protected void handleSwipeFeedBack(String s, ERROR err) {
43         // 错误返回信息,以及错误类型
44         super.handleSwipeFeedBack(s, err); // this will toast a prompt
45         // you can define your own swipe feedback here
46     }
47



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章