轉 : Squareup刷卡器,音頻讀卡識別android/iOS源碼API
相信很多人已經見過squareup的讀卡器了,銀行磁卡在該讀卡器上一刷,則能從手機中獲取銀行卡磁道的信息。
SquareUp讀卡器在iPhone上的應用
我最近開發了一個適應手機非常廣闊的讀卡器API,刷卡時,能讀取出二磁道信息(利用squareup讀卡器,中國大陸大部分模仿者採用的讀卡器原理與此相同,就像一個磁帶機的磁頭,成本低廉),並且能給出所有反饋細節。
該API源碼包括了許多濾波器與數字信號處理知識,如果單獨從頭寫,對於程序員來說,不免還是有點太耽誤時間了,對於一個人來說,要做到這些,少說也得半個月。我開發這個API,其實從第一版本到大量測試結束後,差不多也用了兩個多月,主要的工作量都來自於優化算法以及磁卡識別率。
再來說說API的功能,主要是反饋信息,例如,刷卡過快,刷卡過慢,刷卡不正,讀卡器插入,讀卡器拔出等等。該API適應手機範圍基本囊括了支持以下標準的所有山寨機和品牌手機。
標準:
手機支持耳機音頻麥克風輸入,帶寬大於50Hz-15kHz。
手機系統Android版本大於2.2,api支持2.2~4.0所有版本
下面是一段使用api的代碼實例:
02 |
*
CardReaderBaseActivity 是一個api提供的activity簡單封裝 |
03 |
*
我們可以從這個類派生一個Acitivity,也可以模擬CardReaderBaseActivity寫一個屬於自己的功能更強大的類 |
04 |
*
API的所有精華來自另一個被封裝到這個類裏面的類,@see CardReader |
06 |
public class CardAPIActivity extends CardReaderBaseActivity
{ |
08 |
private ImageView
img; |
10 |
/**
Called when the activity is first created. */ |
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); |
20 |
protected void handlePlugIn()
{ |
22 |
img.setImageResource(R.drawable.indicator); |
27 |
protected void handlePlugOut()
{ |
29 |
img.setImageResource(R.drawable.indicator_off); |
34 |
protected void handleCardNumber(String
CardNumber) { |
36 |
super .handleCardNumber(CardNumber); |
38 |
txt.setText( "卡號:" +CardNumber+ "\n第二磁道原始數據:\n" +ci.toString()); |
42 |
protected void handleSwipeFeedBack(String
s, ERROR err) { |
44 |
super .handleSwipeFeedBack(s,
err); |