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