转 : 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); |