Flutter校验算法插件luhn_algorithm的使用

Flutter校验算法插件luhn_algorithm的使用

Luhn算法

Luhn算法是Dart语言中实现的著名Luhn算法。它可用于生成、计算校验码和验证。

背景

Luhn算法,也称为模10算法或mod 10算法,是一种简单的校验公式,用于验证各种标识号,如信用卡号码、IMEI号码、加拿大社会保险号码等。该算法由一组数学家在20世纪60年代末创建,并很快被信用卡公司采纳。由于该算法属于公共领域,任何人都可以使用。大多数信用卡和许多政府识别号码都使用该算法作为简单的方法来区分有效的号码与误输入或其他错误的号码。

它设计用于防止人为错误,而不是恶意攻击。

该算法能够检测任何单个数字错误,以及几乎所有相邻数字的转置错误。但是,它无法检测到两个数字序列09和90之间的转置(反之亦然)。它还可以检测大部分可能的双位错误(例如,它无法检测到22与55、33与66或44与77之间的互换)。

优点:

  • 可以检测字符读取或书写错误
  • 数字前导零的存在与否不会改变校验和
  • 由MasterCard、American Express、Visa等公司使用

缺点:

  • 不能检测某些数字排列的变化。例如,09与90的校验和相同。
  • 无法检测到所有双位错误。例如,22与55。

快速开始

安装

pubspec.yaml文件中添加以下依赖项:

dependencies:
  luhn_algorithm: ^1.0.0

或者直接通过命令行安装:

dart pub add luhn_algorithm

使用

生成

此包包含一个生成有效Luhn值的函数。您可以提供自己的格式,非数字字符将被忽略。

这特别适用于测试。

生成为迭代器

你可以通过指定以下参数来微调结果:

  • format:指定格式,其中x代表随机数字(0-9),而c控制数字必须始终位于格式的最后位置。
  • n:返回的值的数量。

所有其他在format参数中指定的字符都将保留但将在算法计算中忽略。

import 'package:luhn_algorithm/luhn_algorithm.dart';

var iterator = Luhn.generate(n: 3);
for (String value in iterator) {
  print('Generated value is $value'); // 输出生成的值
}
// Generated value is 91207
// Generated value is 25643
// Generated value is 48322

Luhn.generate(format: 'xxxx-xxxx-xxxx-xxxc', n: 10).forEach(print); // 生成并打印10个格式化的值
// 8766-6207-9825-0454
// 0748-6872-9179-2506
// 7721-4655-2308-2418
// 5357-3522-2909-5388
// 1132-3019-6824-9848
// 5293-2324-7757-8003
// 9901-8998-8519-1219
// 1899-7700-9488-9896
// 0663-3751-6153-3629
// 2410-2528-3254-5799
生成为列表

此函数接受与generate函数相同的参数。

import 'package:luhn_algorithm/luhn_algorithm.dart';

Luhn.generateList(format: 'xxxx/xx/xx/xxc', n: 3).forEach(print); // 生成并打印3个格式化的值
// 3326/95/78/028
// 7705/37/94/556
// 0775/73/88/967

print(Luhn.generateList(format: 'xxc', n: 10)); // 生成并打印10个未格式化的值
// [968, 075, 760, 497, 174, 463, 372, 133, 455, 836]

计算校验码

要获取某个值的校验码,可以使用checksum函数。

import 'package:luhn_algorithm/luhn_algorithm.dart';

final var checksum = Luhn.checksum('1234'); // 计算'1234'的校验码
print(checksum); // 输出4

验证

要验证现有值,可以使用静态方法Luhn.validate。代码假定字符串的最后一个字符是控制数字。

import 'package:luhn_algorithm/luhn_algorithm.dart';

print(Luhn.validate('12344')); // 输出true
print(Luhn.validate('1234-1234-1234-1234')); // 输出false

更多关于Flutter校验算法插件luhn_algorithm的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter校验算法插件luhn_algorithm的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


luhn_algorithm 是一个用于实现 Luhn 算法的 Flutter 插件。Luhn 算法通常用于验证信用卡号码、IMEI 号码等数字的合法性。下面是如何在 Flutter 项目中使用 luhn_algorithm 插件的步骤。

1. 添加依赖

首先,在 pubspec.yaml 文件中添加 luhn_algorithm 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  luhn_algorithm: ^1.0.0  # 请检查最新版本号

然后运行 flutter pub get 来获取依赖。

2. 导入包

在需要使用 Luhn 算法的 Dart 文件中导入 luhn_algorithm 包:

import 'package:luhn_algorithm/luhn_algorithm.dart';

3. 使用 Luhn 算法

luhn_algorithm 插件提供了一个 LuhnAlgorithm 类,你可以使用它来验证一个数字是否符合 Luhn 算法。

下面是一个简单的示例代码,展示如何使用 Luhn 算法来验证信用卡号码:

void main() {
  String cardNumber = "4532015112830366"; // 示例信用卡号码

  bool isValid = LuhnAlgorithm.check(cardNumber);

  if (isValid) {
    print("信用卡号码有效。");
  } else {
    print("信用卡号码无效。");
  }
}

4. 解释

  • LuhnAlgorithm.check(String number):这个方法接受一个字符串形式的数字(如信用卡号码),并返回一个布尔值,表示该数字是否符合 Luhn 算法。
  • 如果返回 true,则表示数字有效;如果返回 false,则表示数字无效。

5. 生成校验位

你还可以使用 Luhn 算法生成一个校验位。例如,如果你有一个不完整的信用卡号码,你可以生成最后一个校验位:

void main() {
  String incompleteCardNumber = "453201511283036"; // 不完整的信用卡号码

  int checkDigit = LuhnAlgorithm.generateCheckDigit(incompleteCardNumber);

  print("生成的校验位是: $checkDigit");
}

6. 示例输出

如果你运行上面的代码,你可能会得到如下输出:

生成的校验位是: 6
回到顶部