Flutter校验码生成与验证插件checkdigit的使用

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

Flutter校验码生成与验证插件checkdigit的使用

Checkdigit 插件简介

Checkdigit 是一个用于在Flutter项目中实现多种校验码算法的库,它提供了多种常见的校验码算法,如Luhn、Verhoeff、Damm、ISBN(10和13)、ISIN、CPF、IBAN、CNPJ以及EAN-X(包括EAN-13、UPC-A和EAN-8)。这些算法主要用于识别号码上的错误。

GitHub Stars Star on GitHub

License: MIT License: MIT

安装

要在您的Flutter项目中使用此插件,您需要在pubspec.yaml文件中添加如下依赖:

dependencies:
  checkdigit: ^0.3.1

然后运行flutter pub get以安装该包。

使用示例

以下是一些常见用法的代码示例,展示了如何使用不同的校验码算法。

Luhn 算法

import 'package:checkdigit/checkdigit.dart';

void main() {
  // 校验给定的数字是否有效
  bool isValid = luhn.validate('79927398713');
  print('Luhn Validation Result: $isValid'); // 输出: true
  
  // 计算校验位
  int checkDigit = luhn.checkDigit('7992739871');
  print('Luhn Check Digit: $checkDigit'); // 输出: 3
  
  // 将校验位作为字符串返回
  String checkDigitAsString = luhn.checkDigitAsString('7992739871');
  print('Luhn Check Digit as String: $checkDigitAsString'); // 输出: "3"
}

Verhoeff 算法

import 'package:checkdigit/checkdigit.dart';

void main() {
  bool isValid = verhoeff.validate('2363');
  print('Verhoeff Validation Result: $isValid'); // 输出: true
  
  int checkDigit = verhoeff.checkDigit('236');
  print('Verhoeff Check Digit: $checkDigit'); // 输出: 3
  
  String checkDigitAsString = verhoeff.checkDigitAsString('236');
  print('Verhoeff Check Digit as String: $checkDigitAsString'); // 输出: "3"
}

其他算法

其他算法如Damm、ISBN(10和13)、ISIN、CPF、IBAN、CNPJ以及EAN-X等的使用方式类似,只需替换相应的函数名即可。例如:

import 'package:checkdigit/checkdigit.dart';

void main() {
  // Damm算法示例
  print(damm.validate('5724')); // 输出: true
  print(damm.checkDigit('572') == 4); // 输出: true
  
  // ISBN-13算法示例
  print(isbn13.validate('9783161484100')); // 输出: true
  print(isbn13.checkDigit('978316148410') == 0); // 输出: true
  
  // ISIN算法示例
  print(isin.validate('US0378331005')); // 输出: true
  print(isin.checkDigit('US037833100') == 5); // 输出: true
  
  // CPF算法示例
  print(cpf.validate('11144477735')); // 输出: true
  print(cpf.checkDigit('111444777') == 35); // 输出: true
  
  // IBAN算法示例
  print(iban.validate('GB82WEST12345698765432')); // 输出: true
  print(iban.checkDigit('GB00WEST12345698765432') == 82); // 输出: true
}

以上就是关于checkdigit插件的基本介绍及使用方法,希望对您有所帮助!如果您有任何问题或需要进一步的帮助,请随时查阅官方文档或访问GitHub仓库获取更多信息。


更多关于Flutter校验码生成与验证插件checkdigit的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter校验码生成与验证插件checkdigit的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter中,使用checkdigit插件可以方便地实现校验码的生成与验证。以下是一个简单的代码示例,展示了如何使用这个插件。

首先,确保你已经在pubspec.yaml文件中添加了checkdigit依赖:

dependencies:
  flutter:
    sdk: flutter
  checkdigit: ^最新版本号  # 请替换为实际可用的最新版本号

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

接下来,是具体的代码实现。以下是一个简单的Flutter应用示例,展示了如何使用checkdigit插件生成和验证校验码。

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Check Digit Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: CheckDigitExample(),
    );
  }
}

class CheckDigitExample extends StatefulWidget {
  @override
  _CheckDigitExampleState createState() => _CheckDigitExampleState();
}

class _CheckDigitExampleState extends State<CheckDigitExample> {
  final TextEditingController _numberController = TextEditingController();
  final TextEditingController _checkDigitController = TextEditingController();
  String? _verificationResult;

  void _generateCheckDigit() {
    String number = _numberController.text;
    if (number.isNotEmpty && number.allMatch(RegExp(r'^\d+$'))) {
      String checkDigit = CheckDigit.calculateMod11(number);
      _checkDigitController.text = checkDigit;
    } else {
      ScaffoldMessenger.of(context).showSnackBar(
        SnackBar(content: Text('请输入有效的数字字符串')),
      );
    }
  }

  void _verifyCheckDigit() {
    String number = _numberController.text;
    String checkDigit = _checkDigitController.text;
    if (number.isNotEmpty && checkDigit.isNotEmpty && number.allMatch(RegExp(r'^\d+$')) && checkDigit.allMatch(RegExp(r'^\d$'))) {
      bool isValid = CheckDigit.validateMod11(number, checkDigit);
      setState(() {
        _verificationResult = isValid ? '校验通过' : '校验失败';
      });
    } else {
      ScaffoldMessenger.of(context).showSnackBar(
        SnackBar(content: Text('请输入有效的数字和校验码')),
      );
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('校验码生成与验证'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: [
            TextField(
              controller: _numberController,
              decoration: InputDecoration(
                labelText: '输入数字字符串',
              ),
              keyboardType: TextInputType.number,
            ),
            SizedBox(height: 16),
            TextField(
              controller: _checkDigitController,
              decoration: InputDecoration(
                labelText: '生成的校验码',
                enabled: false,
              ),
              keyboardType: TextInputType.number,
            ),
            SizedBox(height: 16),
            ButtonBar(
              alignment: MainAxisAlignment.start,
              children: [
                TextButton(
                  onPressed: _generateCheckDigit,
                  child: Text('生成校验码'),
                ),
                SizedBox(width: 16),
                TextButton(
                  onPressed: _verifyCheckDigit,
                  child: Text('验证校验码'),
                ),
              ],
            ),
            SizedBox(height: 16),
            if (_verificationResult != null)
              Text(
                _verificationResult!,
                style: TextStyle(fontSize: 18, color: Colors.red),
              ),
          ],
        ),
      ),
    );
  }
}

在这个示例中,我们创建了一个简单的Flutter应用,包含两个TextField用于输入数字字符串和生成的校验码,以及两个TextButton用于生成和验证校验码。

  • _generateCheckDigit方法使用CheckDigit.calculateMod11根据输入的数字字符串生成校验码,并显示在第二个TextField中。
  • _verifyCheckDigit方法使用CheckDigit.validateMod11验证输入的数字字符串和校验码是否匹配,并在页面上显示验证结果。

注意,CheckDigit.calculateMod11CheckDigit.validateMod11是基于Mod 11算法的校验码生成和验证方法,你可以根据实际需要选择其他算法或自定义算法。

回到顶部