Flutter机器可读区域(MRZ)扫描插件mrz_scanner的使用

发布于 1周前 作者 caililin 来自 Flutter

Flutter机器可读区域(MRZ)扫描插件mrz_scanner的使用

本包允许你扫描任何具有MRZ格式的文档。

支持的格式

  • T1 (官方旅行证件)
  • T2 (官方旅行证件)
  • T3 (机器可读护照)
  • MRVA (机器可读签证文件)
  • MVRB (机器可读签证文件)

如果你希望在此包中看到任何功能,请随时提出建议。🎉

注意事项

为了使用此包,你需要使用真实设备而不是模拟器。

这是一个适用于iOS和Android的Flutter插件。

Android iOS
支持 SDK 21+ iOS 10+*

在使用包之前,需要添加相机权限

对于Android

AndroidManifest.xml文件中添加以下代码:

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

对于iOS

Info.plist文件中添加以下代码:

<key>NSCameraUsageDescription</key>
<string>允许相机扫描MRZ</string>

导入包并在你的Flutter应用中使用它:

import 'package:mrz_scanner/mrz_scanner.dart';

简单使用该包的示例,完整的代码可以在示例项目中查看 这里

MRZScanner(
  onSuccess: (mrzResult) {
    print(mrzResult.givenNames);
  },
),

视频样例

Demo

大大的感谢

特别感谢 Anna Domashych 提供的 mrz_parser

许可证

mrz_scanner 是在 MIT 许可下发布的。详情请参阅 LICENSE 文件。


完整示例代码

以下是完整的示例代码,展示了如何在Flutter应用中使用mrz_scanner插件。

import 'package:flutter/material.dart';
import 'package:mrz_scanner/mrz_scanner.dart';

Future<void> main() async {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  [@override](/user/override)
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  final MRZController controller = MRZController();

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Builder(builder: (context) {
        return MRZScanner(
          controller: controller,
          onSuccess: (mrzResult) async {
            await showDialog(
              context: context,
              builder: (context) => Dialog(
                insetPadding: const EdgeInsets.symmetric(horizontal: 10),
                child: SingleChildScrollView(
                  padding: const EdgeInsets.all(10),
                  child: Column(
                    crossAxisAlignment: CrossAxisAlignment.start,
                    children: [
                      TextButton(
                        onPressed: () {
                          Navigator.pop(context);
                          controller.currentState?.resetScanning();
                        },
                        child: const Text('重置扫描'),
                      ),
                      Text('姓名: ${mrzResult.givenNames}'),
                      Text('性别: ${mrzResult.sex.name}'),
                      Text('国家代码: ${mrzResult.countryCode}'),
                      Text('出生日期: ${mrzResult.birthDate}'),
                      Text('到期日期: ${mrzResult.expiryDate}'),
                      Text('证件号码: ${mrzResult.documentNumber}'),
                    ],
                  ),
                ),
              ),
            );
          },
        );
      }),
    );
  }
}

更多关于Flutter机器可读区域(MRZ)扫描插件mrz_scanner的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter机器可读区域(MRZ)扫描插件mrz_scanner的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中使用mrz_scanner插件来扫描机器可读区域(MRZ)的代码示例。mrz_scanner是一个用于扫描和解析护照、身份证等文档上的MRZ信息的Flutter插件。

1. 添加依赖

首先,你需要在pubspec.yaml文件中添加mrz_scanner依赖:

dependencies:
  flutter:
    sdk: flutter
  mrz_scanner: ^latest_version  # 请替换为最新版本号

然后运行flutter pub get来安装依赖。

2. 使用MRZ Scanner

以下是一个完整的示例,展示如何使用mrz_scanner插件来扫描并解析MRZ信息。

import 'package:flutter/material.dart';
import 'package:mrz_scanner/mrz_scanner.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'MRZ Scanner Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: ScannerScreen(),
    );
  }
}

class ScannerScreen extends StatefulWidget {
  @override
  _ScannerScreenState createState() => _ScannerScreenState();
}

class _ScannerScreenState extends State<ScannerScreen> {
  late MRZScannerController _controller;
  String? _resultText;

  @override
  void initState() {
    super.initState();
    _controller = MRZScannerController(
      onError: (error) {
        print("Error: $error");
      },
      onMRZResult: (mrzResult) {
        setState(() {
          _resultText = mrzResult.toString();
        });
        print("MRZ Result: $mrzResult");
      },
    );
  }

  @override
  void dispose() {
    _controller.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('MRZ Scanner Demo'),
      ),
      body: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: <Widget>[
          Expanded(
            child: MRZScannerView(controller: _controller),
          ),
          if (_resultText != null)
            Padding(
              padding: const EdgeInsets.all(16.0),
              child: Text(
                'Scanned Result:\n$_resultText',
                style: TextStyle(fontSize: 18),
              ),
            ),
          ElevatedButton(
            onPressed: () async {
              // Start scanning
              await _controller.startCamera();
            },
            child: Text('Start Scanning'),
          ),
          ElevatedButton(
            onPressed: () async {
              // Stop scanning
              await _controller.stopCamera();
            },
            child: Text('Stop Scanning'),
          ),
        ],
      ),
    );
  }
}

解释

  1. 添加依赖:在pubspec.yaml中添加mrz_scanner依赖。
  2. 初始化控制器:在ScannerScreen的状态初始化中,创建MRZScannerController实例,并设置错误处理和MRZ结果回调。
  3. 构建UI:使用MRZScannerView显示相机预览,并添加按钮来启动和停止扫描。
  4. 显示结果:当扫描到MRZ信息时,更新UI显示结果。

注意事项

  • 确保在Android和iOS项目中配置了相机权限。
  • 根据需要调整UI布局和按钮功能。
  • 处理扫描结果的逻辑可以根据具体需求进行扩展。

这个示例展示了基本的MRZ扫描功能,你可以根据实际需求进一步定制和优化。

回到顶部