NFC基础知识与读写

序 最近的项目需求中,需要使用NFC芯片来保存一些类似于url的信息并通过iOS或Android手机能正常获取到相关信息,所以针对NFC相关技术与特点进行了学习和总结。我会把我看过教程链接也同步贴到文章中。因为手上只有M1卡,所以下面的主要内容也围绕M1卡来进行 什么是NFC 近场通信(英语:Near-field communication,NFC),又称近距离无线通信、近距离通信,是一套通信协议,让两个电子设备(其中一个通常是移动设备,例如智能手机)在相距几厘米之内进行通信。NFC,如同过去的电子票券智能卡一般,将允许移动支付取代或支持这类系统。NFC应用于社交网络,分享联系方式、照片、视频或文件。具备 NFC 功能的设备可以充当电子身份证和钥匙卡。NFC 提供了设置简便的低速连接,也可用于引导能力更强的无线连接。 近场通信技术由非接触式射频识别(RFID)演变而来,由飞利浦半导体(现恩智浦半导体)、诺基亚和索尼共同于2004年研制开发,其基础是RFID及互连技术。近场通信是一种短距高频的无线电技术,在13.56MHz频率运行于20厘米距离内。其传输速度有106 Kbit/秒、212 Kbit/秒或者424 Kbit/秒三种。目前近场通信已通过成为ISO/IEC IS 18092国际标准、EMCA-340标准与ETSI TS 102 190标准。NFC采用主动和被动两种读取模式。 每一个完整的NFC设备可以用三种模式工作: 卡模拟模式(Card emulation mode):这个模式其实就是相当于一张采用RFID技术的IC卡。可以替代现在大量的IC卡(包括信用卡)场合商场刷卡、IPASS、门禁管制、车票、门票等等。此种方式下,有一个极大的优点,那就是卡片通过非接触读卡器的RF域来供电,即便是寄主设备(如手机)没电也可以工作。NFC设备若要进行卡片模拟(Card Emulation)相关应用,则必须内置安全组件(Security Element, SE)之NFC芯片或通过软件实现主机卡模拟(Host Card Emulation,HCE)。 读卡器模式(Reader/Writer mode):作为非接触读卡器使用,比如从海报或者展览信息电子标签上读取相关信息。 点对点模式(P2P mode):这个模式和红外线差不多,可用于数据交换,只是传输距离较短,传输创建速度较快,传输速度也快些,功耗低(蓝牙也类似)。将两个具备NFC功能的设备链接,能实现数据点对点传输,如下载音乐、交换图片或者同步设备地址薄。因此通过NFC,多个设备如数位相机、PDA、计算机和手机之间都可以交换资料或者服务。 维基百科-近场通信 百度-NFC 各种NFC卡的区别 卡 功能描述 普通IC卡 0扇区不可以修改,其他扇区可反复擦写,我们使用的电梯卡、门禁卡等智能卡发卡商所使用的都是 M1 卡,可以理解为物业发的原卡。 UID 卡 普通复制卡,可以重复擦写所有扇区,主要应用在IC卡复制上,遇到带有防火墙的读卡器就会失效。 CUID 卡 可擦写防屏蔽卡,可以重复擦写所有扇区,UID卡复制无效的情况下使用,可以绕过防火墙。 FUID 卡 不可擦写防屏蔽卡,此卡的特点0扇区只能写入一次,写入一次变成 M1 卡,CUID 复制没用的情况下使用,可以绕过防火墙。 UFUID 卡 高级复制卡,我们就理解为是 UID 和 FUID 的合成卡,需要封卡操作,不封卡就是 UID 卡,封卡后就变为 M1 卡。 知乎-司小凯-UID卡、IC卡、ID卡、CUID 卡、FUID 卡、UFUID 卡 的区别 NFC标签类型 目前iOS系统并没有开放过多的NFC权限,所以这里讨论通过Android系统操作NFC标签,以下是Android系统操作NFC标签支持的标签技术类型 Class Description TagTechnology 这是所有标签技术类都必须实现的接口。 NfcA 提供对 NFC-A (ISO 14443-3A) 属性和 I/O 操作的访问权限。 NfcB 提供对 NFC-B (ISO 14443-3B) 属性和 I/O 操作的访问权限。 NfcF 提供对 NFC-F (JIS 6319-4) 属性和 I/O 操作的访问权限。 NfcV 提供对 NFC-V (ISO 15693) 属性和 I/O 操作的访问权限。 IsoDep 提供对 ISO-DEP (ISO 14443-4) 属性和 I/O 操作的访问权限。 Ndef 提供对 NDEF 格式的 NFC 标签上的 NDEF 数据和操作的访问权限。 NdefFormatable 为可设置为 NDEF 格式的标签提供格式化操作。 MifareClassic 提供对 MIFARE Classic 属性和 I/O 操作的访问权限(如果此 Android 设备支持 MIFARE)。 MifareUltralight 提供对 MIFARE Ultralight 属性和 I/O 操作的访问权限(如果此 Android 设备支持 MIFARE)。 Android开发文档-高级NFC概览...

2022/11/18 · mangk

Golang GUI开发总结

govcl fyne wails walk wxwidgets webview

2022/11/03 · mangk

Golang构建桌面程序之webview

序 最近接到的任务是开发一个可以在mac和windows上运行的程序,作为一个golang程序员首先想到的自然是golang。跨平台编译运行也让他可以做这件事。结合前面我了解到的一些框架(govcl,fyne,wails,walk,wxwidgets),考虑学习的时间成本我本来是想用fyne来做。直到后来我找到了这个能更快完成需求的包webview。所以今天主要来介绍webview这个可以跨平台生成可执行文件的框架。 Golang 的 webview package

2022/11/03 · mangk

docker swarm集群的使用

序 咱们书接上回,我搞定了golang程序的编译,搞定了docker镜像的打包,搞定了流水线。现在项目部署与热更新成了我要面对的问题。 受制于公司提供的部署环境(只提供给我一台主机,主机上有docker),我暂时没有k8s集群可用,但又希望能完成基于流水线的自动部署、热更新和不停机更新。所以返现了下面要说的docker swarm 什么是 swarm mode Swarm 是使用 SwarmKit 构建的 Docker 引擎内置(原生)的集群管理和编排工具。具体内容可以参见:基本概念,这里不再详细解释。 集群创建 docker swarm init Swarm initialized: current node (dxn1zf6l61qsb1josjja83ngz) is now a manager. To add a worker to this swarm, run the following command: docker swarm join \ --token SWMTKN-1-49nj1cmql0jkz5s954yi3oex3nedyz0fb0xx14ie39trti4wxv-8vxv8rssmk743ojnwacrr2e7c \ 192.168.99.100:2377 To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions. 使用docker swarm init命令,创建一个集群,本机的docker就会变成一个单节点的集群。

2022/09/30 · mangk

使用alpine构建Docker镜像

序 最近的工作中,我使用Golang开发了一个web项目,并准备通过流水线的方式做持续集成与发布。在这是用过程中遇到了一些技术与问题包括:通过make构建golang程序、dockerfile不能访问父级目录、使用Alpine作为基础来制作我的容器镜像 通过Makefile打包Golang程序 什么是Makefile 代码变成可执行文件,叫做编译(compile);先编译这个,还是先编译那个(即编译的安排),叫做构建(build)。Make是最常用的构建工具,诞生于1977年,主要用于C语言的项目。但是实际上,任何只要某个文件有变化,就要重新构建的项目,都可以用Make构建。 关于make命令这里不做深入介绍,引用链接提供介绍清晰明了的直通车(让我们感谢大神🙏) 阮一峰的网络日志-Make命令教程 Golang项目使用Makefile 我对makefile文件的理解是它有点像时一个命令的集合,通过一个个target<目标>可以按照顺序快速的执行多条命令而不用再手动一条条输入。if else与变量的加入让这个流程变得更加丰富和多变。省去了命令输入的同时也让代码运行的流程更加清楚。 示例代码 .PHONY: build clean run # golang 打包可执行文件的运行环境 (可以在运行make命令时传入:make OS=windows) OS=linux BUILD_DOCKER_IMAGE=0 all: build run: go run ./cmd/main.go build: # 下面的GOOS=$(OS)使用了上面定义的OS变量 @GO111MODULE=on GOPROXY=https://goproxy.cn,direct CGO_ENABLED=0 go mod tidy && GOOS=$(OS) go build -o app main.go # if判断中同样可以使用变量 ifeq ($(BUILD_DOCKER_IMAGE),1) @cd deploy && docker build -t . endif clean: # 命令前加@会让命令执行但不在控制台输出,这里没有@命令执行时会输出到终端 rm app ifeq ($(BUILD_DOCKER_IMAGE),1) @docker rmi recommend_photo endif Dockerfile不能访问父级目录 项目汇中我使用Dockerfile作为构架docker镜像的基础。通过docker build -t image_name ....

2022/09/27 · mangk