轉 : 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



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