天天看点

巡更打卡的实现机制,NFC与RFID

作者:5G安全帽

NFC与RFID的区别

RFID

RFID是radio-frequency identification的缩写,表示射频识别技术。把数字信息编码到RFID标签中,阅读器通过无线电波读取到这些信息。

RFID在没有光线的情况下也能使用。

RFID属于自动识别(AIDC:Automatic Identification and Data Capture)技术中的一种。

简单的说,RFID系统包含三个部分:RFID标签、阅读器和天线。

电子标签又称为射频标签、应答器、数据载体;阅读器又称为读出装置,扫描器、通讯器、读写器(取决于电子标签是否可以无线改写数据)。

RFID标签里包含一个集成电路和天线。

RFID标签分为有源和无源的(passive and active)。

无源RFID标签应用更广,因为更小更便宜。它需要阅读器提供电源,然后才能发送数据。

而有源标签有板上电源,因此可以一直发送数据。

RFID每秒钟可进行上千次的读取,能同时处理许多标签,高效且高度准确,从而使企业能够在既不降低(甚至提高)作业效率,又不增加(甚至减少)管理成本的.前提下,大幅度提高管理精细度,让整个作业过程实时透明,创造了巨大的经济效益;

RFID标签上的数据可反复修改,既可以用来传递一些关键数据,也使得标签能够在企业内部进行循环重复使用,将一次性成本转化为长期摊销的成本,既节约了企业运行成本,也降低了企业采用RFID技术的风险成本。

RFID标签无需像条码标签那样瞄准读取,只要被置于读取设备形成的电磁场内就可以准确读到,更加适合与各种自动化的处理设备配合使用,同时减少甚至排除因人工干预数据采集而带来的人力资源、效率降低和产生差错以及纠错的成本。

RFID标签的识读,不需要以目视可见为前提,因为它不依赖于可见光,因而可以在那些条码技术无法适应的恶劣环境下使用,如高粉尘污染、野外等场合,进一步扩大自动识别技术的应用范围。

使用场景:

低频RFID技术一直用于近距离的门禁管理。由于其信噪比较低,其识读距离受到很大限制,低频系统防冲撞性能差,多标签同时读取时速度慢,性能也容易受其它电磁环境影响。13.56MHz高频RFID产品可以部分地解决这些问题,标签读取速度快、可以实现多标签同时识读,形式多样,价格合理。但是13.56MHzRFID产品对可导媒介(如液体、高湿和碳介质等)穿透性很差,由于其频率特性,识读距离短。860~960MHz的RFID产品常常被推荐应用在供应链管理上,超高频产品识读距离长,能够实现高速识读和多标签同时识读。但超高频对于如金属等可导媒介完全不能穿透。为了解决RFID系统工作频率所造成的对特定物品(高湿)识别效果的局限性,可以将低频和高频两个频率集成到一枚芯片上。

还有一些衣服上会使用RFID标签进行防盗,当门禁读取到没有付款的产品的RFID信息,就会报警,还有一些是带有明显线圈的RFID标签,比如一些门禁卡。

NFC

NFC是NearFieldCommunication缩写,即近距离无线通讯技术。由飞利浦公司和索尼公司共同开发的NFC是一种非接触式识别和互联技术,可以在移动设备、消费类电子产品、PC和智能控件工具间进行近距离无线通信。NFC提供了一种简单、触控式的解决方案,可以让消费者简单直观地交换信息、访问内容与服务。

第一、NFC将非接触读卡器、非接触卡和点对点功能整合进一块单芯片,而rfid由阅读器和标签组成。RFID能实现信息的读取以及判定,而NFC技术则强调的是信息交互。通俗的说NFC就是RFID的演进版本,双方可以近距离交换信息。目前的NFC手机内置NFC芯片,组成RFID模块的一部分,可以当作RFID无源标签使用进行支付费用;也可以当作RFID读写器,用作数据交换与采集,还可以进行NFC手机之间的数据通信。

第二、NFC传输范围比RFID小,RFID的传输范围可以达到几米、甚至几十米,但由于NFC采取了独特的信号衰减技术,相对于RFID来说NFC具有距离近、带宽高、能耗低等特点。

第三、应用方向不同。NFC目前来看更多的是针对于消费类电子设备相互通讯,有源RFID则更擅长在长距离识别。RFID更多的被应用在生产、物流、跟踪、资产管理上,而NFC则在门禁、公交、手机支付等领域内发挥着巨大的作用。

NFC的通信机制、工作频率、有源vs无源、数据读取

NFC标签有各种各样的形状和尺寸,最简单的通常是以方形或圆形贴纸的形式制造,这类标签的结构极其简单:由一个细铜线圈和一个微芯片上的小存储空间组成。

线圈允许标签通过称为电磁感应的过程以无线方式从 NFC 阅读器接收电力。本质上,每当你把有电的NFC读取器靠近标签时,后者就会通电,并将其微芯片内的任何存储数据传输给设备。如果涉及敏感数据,标签也可以使用公钥加密,以防止恶意攻击。

由于NFC标签的基本结构非常简单,你可以将所需的硬件装入一大堆外形尺寸中。以酒店钥匙卡或一般的门禁卡为例,这些通常是做成一张塑料卡,上面有一些铜线和一些微芯片的存储器。同样的原则也适用于配备NFC的信用卡和借记卡,它们包含沿着卡周边延伸的细铜线。

值得注意的是,像智能手机和平板电脑这样的供电NFC设备也能作为NFC标签使用。与只支持单向通信的RFID不同,NFC可以促进双向的数据传输。例如,这允许你的手机模拟一个嵌入式NFC标签,如用于非接触式支付的标签。当然,这些是更先进的设备,但基本的操作模式仍然是一样的。

NFC标签有哪些类型

大多数NFC标签遵循ISO 14443的基于近距离数据传输标准,但也有五个子类型,为了方便,标记为1至5。1型标签是最不先进的,因为它们只能存储不到一千字节的数据,这只是几百个字符的文本。所以这样的标签有足够的内存来存储一个URL或Wi-Fi密码,但想要再存储其他信息就不够了。传输速度也不是特别大,大约为100kbps。

而5型NFC标签能够容纳32KB的内存。它们的数据传输速度大约是1类标签的4倍。与相同物理尺寸的典型microSD卡相比,这仍然不是很多的数据。然而,对于票务和访问控制等使用情况来说,这已经足够了。这些类型的标签还可能提供额外的功能,如防篡改和改善干扰处理能力。

然而,就如预想的一样,更先进的NFC标签的制造成本也更高。考虑到通过这种媒介传输的数据很少,大多数应用由更原始的类型提供足够的服务。1型和2型标签更常见,如果批量购买,成本只有几分钱。

NFC标签通常是可读写的,所以你可以根据你的需要重复使用它们。这进一步降低了大规模使用情况下的部署成本。

NFC读取器如何工作

NFC读取器为无源标签提供电源并读取数据。为了实现这一点,NFC读取器需要电源,使电流通过其自身的线圈,这将在读取器附近产生一个交变的磁场。由于法拉第的感应定律,将标签带入这个磁场的范围,最终导致两个线圈之间的感应耦合。

巡更打卡的实现机制,NFC与RFID

一旦标签通电,实际的数据传输过程也相当简单。读取器可以检测NFC标签如何调制电磁场。一种被称为曼彻斯特编码的技术被用来从电磁脉冲中确定二进制值(0和1)。最后,这些二进制值被转换为人类可读的文本。

非接触式支付终端可能是最广泛使用的NFC读取器,公共交通卡则紧随其后。在这两种情况下,你都会得到一个独特的NFC标签,其形式为卡片或令牌,上面存储着你的余额或账户信息。同时,读取器通常是固定的设备,与电源和数据有主动连接,有时分别通过电池和Wi-Fi连接。

NFC标签:如何读取和写入数据

如前所述,如今大多数中档和高档智能手机都包含NFC硬件。这使得读取一个现有的NFC标签变得非常简单,只需使用智能手机的背面与它进行物理接触。根据标签的内容,一个弹出窗口会自动出现在你的设备上,并提示你完成一个动作。例如,一个带有URL的标签可能会浮出网络浏览器,而嵌入一副耳机的标签会自动启动蓝牙配对。

至于写入或覆盖数据,需要注意的是,并非所有NFC标签都能进行读写操作。某些标签,如那些为访问控制而设计的标签,可能有写入保护功能,以防止篡改或未经授权的修改。而一些无品牌的NFC贴纸和卡片,是可以重写NFC标签数据的。

有了可改写的NFC标签,你可以对它进行编程,让它做任何你想做的事。像NFC工具这样的应用程序将允许你在标签上写入联系人、蓝牙配对信息、网站链接或Wi-Fi配置。

安卓接口

支持 NFC 的 Android 设备同时支持以下三种主要操作模式:

读取器/写入器模式:支持 NFC 设备读取和/或写入被动 NFC 标签和贴纸。

点对点模式:支持 NFC 设备与其他 NFC 对等设备交换数据;- Android Beam 使用的就是此操作模式。

卡模拟模式:支持 NFC 设备本身充当 NFC 卡。然后,可以通过外部 NFC 读取器(例如 NFC 销售终端)访问模拟 NFC 卡。

NFC读取卡片数据流程:

Android 设备通常会在屏幕解锁后查找 NFC 标签(停用NFC除外)

卡片接近启动标签调度系统

数据通过Intent携带数据启动Activity

标签调度系统定义了三种 Intent,按优先级从高到低列出如下:

1. ACTION_NDEF_DISCOVERED:如果扫描到包含 NDEF 负载的标签,并且可识别其类型,则使用此 Intent 启动 Activity。这是优先级最高的 Intent,标签调度系统会尽可能尝试使用此 Intent 启动 Activity,在行不通时才会尝试使用其他 Intent。

2. ACTION_TECH_DISCOVERED :如果没有登记要处理 ACTION_NDEF_DISCOVERED Intent 的 Activity,则标签调度系统会尝试使用此 Intent 来启动应用。此外,如果扫描到的标签包含无法映射到 MIME 类型或 URI 的 NDEF 数据,或者该标签不包含 NDEF 数据,但它使用了已知的标签技术,那么也会直接启动此 Intent(无需先启动 ACTION_NDEF_DISCOVERED)。

3. ACTION_TAG_DISCOVERED:如果没有处理 ACTION_NDEF_DISCOVERED 或者 ACTION_TECH_DISCOVERED Intent 的 Activity,则使用此 Intent 启动 Activity。

启动Activity 处理Intent携带的数据

实现读取北京地铁卡数据功能

1. 配置NFC权限

<!-- API 级别 9 仅通过 所以最低是10版本-->

<uses-sdk android:minSdkVersion="10" />

<!-- NFC 权限 -->

<uses-permission android:name="android.permission.NFC" />

<!-- 以便您的应用仅在那些具备 NFC 硬件的设备的 Google Play 中显示:-->

<uses-feature

android:name="android.hardware.nfc"

android:required="true" />

2. 配置NFC拉起页面的过滤器选项

<!--NFC启动的页面 -->

<activity android:name=".NFCActivity">

<!-- 配置过滤启动类型-->

<intent-filter>

<action android:name="android.nfc.action.TECH_DISCOVERED" />

</intent-filter>

<meta-data

android:name="android.nfc.action.TECH_DISCOVERED"

android:resource="@xml/nfc_tech_filter" />

<!-- <intent-filter>-->

<!-- <action android:name="android.nfc.action.NDEF_DISCOVERED"/>-->

<!-- <category android:name="android.intent.category.DEFAULT"/>-->

<!-- <data android:scheme="http"-->

<!-- android:host="developer.android.com"-->

<!-- android:pathPrefix="/index.html" />-->

<!-- </intent-filter>-->

<!-- <intent-filter>-->

<!-- <action android:name="android.nfc.action.NDEF_DISCOVERED"/>-->

<!-- <category android:name="android.intent.category.DEFAULT"/>-->

<!-- <data android:mimeType="text/plain" />-->

<!-- </intent-filter>-->

</activity>

注意 nfc_tech_filter.xml 是过滤NFC 卡片类型

<?xml version="1.0" encoding="utf-8"?>

<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">

<!-- 可以处理所有Android支持的NFC类型 -->

<tech-list>

<tech>android.nfc.tech.IsoDep</tech>

</tech-list>

<tech-list>

<tech>android.nfc.tech.NfcA</tech>

</tech-list>

<tech-list>

<tech>android.nfc.tech.NfcB</tech>

</tech-list>

<tech-list>

<tech>android.nfc.tech.NfcF</tech>

</tech-list>

<tech-list>

<tech>android.nfc.tech.NfcV</tech>

</tech-list>

<tech-list>

<tech>android.nfc.tech.Ndef</tech>

</tech-list>

<tech-list>

<tech>android.nfc.tech.NdefFormatable</tech>

</tech-list>

<tech-list>

<tech>android.nfc.tech.MifareUltralight</tech>

</tech-list>

<tech-list>

<tech>android.nfc.tech.MifareClassic</tech>

</tech-list>

</resources>

4. 启动页面代码

import android.content.Intent

import android.nfc.NdefMessage

import android.nfc.NdefRecord.createMime

import android.nfc.NfcAdapter

import android.nfc.NfcEvent

import android.nfc.Tag

import android.os.Bundle

import android.widget.Toast

import androidx.appcompat.app.AppCompatActivity

import androidx.databinding.DataBindingUtil

import com.wkq.nfc.databinding.ActivityMainBinding

/**

* NFC 拉起页面

*/

class NFCActivity : AppCompatActivity(), NfcAdapter.CreateNdefMessageCallback {

//支持的标签类型

private var nfcAdapter: NfcAdapter? = null

private var binding: ActivityMainBinding? = null

override fun onCreate(savedInstanceState: Bundle?) {

super.onCreate(savedInstanceState)

binding = DataBindingUtil.setContentView<ActivityMainBinding>(this, R.layout.activity_main)

nfcAdapter = NfcAdapter.getDefaultAdapter(this)

if (nfcAdapter==null){

Toast.makeText(this, "该机型不支持NFC", Toast.LENGTH_LONG).show()

finish()

}

// Register callback *设置一个回调,使用Android Beam(TM)动态生成要发送的NDEF消息。

nfcAdapter?.setNdefPushMessageCallback(this, this)

}

override fun onResume() {

super.onResume()

// Check to see that the Activity started due to an Android Beam

if (NfcAdapter.ACTION_TECH_DISCOVERED == intent.action) {

processIntent(intent)

}

}

override fun onPause() {

super.onPause()

nfcAdapter!!.disableReaderMode(this)

}

override fun onNewIntent(intent: Intent?) {

super.onNewIntent(intent)

setIntent(intent)

}

/**

* 处理Intent携带的数据

*/

private fun processIntent(intent: Intent) {

// 处理北京公交卡的数据

var tag = intent.extras

if (tag==null)return

var content = NFCUtil.bytesToHex((tag!!.get("android.nfc.extra.TAG") as Tag).id)

binding?.tvContent!!.text = content

Toast.makeText(this, "获取北京地铁卡数据:" + content, Toast.LENGTH_LONG).show()

}

override fun createNdefMessage(event: NfcEvent?): NdefMessage {

val text = "Beam me up, Android!\n\n" +

"Beam Time: " + System.currentTimeMillis()

return NdefMessage(

arrayOf(

createMime("application/vnd.com.example.android.beam", text.toByteArray())

)

)

}

}

这里是简单的利用NFC读取卡片数据的操作,具体的数据处理只是简单的处理了北京公交卡的数据,具体项目业务上需要读取什么卡数据需要项目中具体去处理。

————————————————

版权声明:本文为CSDN博主「金戈鐡馬」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/qq_39312146/article/details/129172798

巡更打卡的实现机制,NFC与RFID
巡更打卡的实现机制,NFC与RFID
巡更打卡的实现机制,NFC与RFID
巡更打卡的实现机制,NFC与RFID
巡更打卡的实现机制,NFC与RFID
巡更打卡的实现机制,NFC与RFID
巡更打卡的实现机制,NFC与RFID
巡更打卡的实现机制,NFC与RFID
巡更打卡的实现机制,NFC与RFID
巡更打卡的实现机制,NFC与RFID
巡更打卡的实现机制,NFC与RFID
巡更打卡的实现机制,NFC与RFID
巡更打卡的实现机制,NFC与RFID
巡更打卡的实现机制,NFC与RFID

继续阅读