cs278/bank-modulus

英国银行模数检查库

v1.15.0 2024-05-03 13:37 UTC

README

Main Build Status Latest Stable Version Total Downloads

此PHP库允许您检查英国银行账户信息的有效性。为此,它使用公开信息和VocaLink发布的规范。

请注意,此库不能告诉您账户号码和银行代码是否与活动账户相关联,它只能告诉您它们可能分配给账户。它也不涵盖所有银行代码,其中一些超出规范,除非已知,否则您应假定这些详情是有效的。

用法

基础知识

此库提供了一个简单的类,通过BankModulus类执行银行账户验证和规范化。

默认情况下,BankModulus类将使用VocaLink发布的当前模数规范,默认规范工厂将根据日期选择正确的规范。

  • normalize(string &$sortCode, string &$accountNumber)

    此功能根据某些银行发布的规则对银行代码和账户号码进行规范化。例如,6位账户号码将填充两个零。

    规范化结果将赋值回输入参数。

  • check(string $sortCode, string $accountNumber) : boolean

    这是确定提供的详细信息是否无效的主要方法,如果银行代码和账户号码无效,则返回false,否则返回true。如果提供的详细信息在语法上有效但超出规范,则此方法认为它们是有效的。

  • lookup(string $sortCode, string $accountNumber) : Result

    使用此方法获取关于银行代码和账户号码的更多详细信息。有关更多信息,请参阅Result类的文档。

  • __construct(SpecFactoryInterface $specFactory, NormalizerInterface $normalizer)

    您可以在构造时更改要使用的规范工厂和规范化器,否则将使用默认值。

  • 示例

    <?php
    
    use Cs278\BankModulus\BankModulus;
    
    $modulus = new BankModulus();
    $modulus->check('08-16-32', '12481632');
    
    $sortCode = '12-24-48';
    $accountNumber = '123456';
    
    $modulus->normalize($sortCode, $accountNumber);
    
    var_dump($sortCode, $accountNumber);
    // string(6) "122448"
    // string(8) "00123456"

Result

Result类提供了关于验证和规范化结果的详细信息。

  • getSortCode() : SortCode

    返回一个表示规范化银行代码的SortCode对象。

  • getAccountNumber() : string

    返回规范化账户号码的字符串。

  • isValidated() : boolean

    返回一个布尔值,如果银行代码和账户号码可以使用规范进行验证,则为真。

  • isValid($assume = true) : boolean

    返回一个布尔值,表示模数验证的结果。如果银行代码和账户号码无法验证,则返回$assume参数的值。

规范工厂

默认规范工厂(Spec\DefaultSpecFactory)选择当前时间最合适的规范。

如果您需要检查特定时间点的银行代码和账户号码的有效性,可以使用withDate(\DateTimeInterface|string $date): self方法来重载当前使用的时间参考。如果您为此方法提供一个对象,它将将其转换为Europe/London的日期,字符串日期将按原样使用。

异常

如果发生意外情况,此库将抛出实现Exception\Exception的异常。

  • Exception\AccountNumberInvalidException

    提供的账户号码不是一个由8个数字组成的字符串。

  • Exception\CannotValidateException

    Spec\SpecInterface的实例无法确定详细信息是否正确,因为它们超出规范时,会抛出此异常。

  • 异常\SortCodeInvalidException

    提供的排序码不是由6个数字组成的字符串。

模算法

目前,该库实现了3种类似的算法来执行模运算,这些算法在VocaLink规范中定义。

  • 标准模运算(Mod10/Mod11

    将排序码和账户号码中的每个数字与相应的权重值相乘,将结果相加,然后根据所使用的算法除以1011。余数为0表示输入有效。

  • 双重交替(DblAl

    将排序码和账户号码中的每个数字与相应的权重值相乘,然后将每个结果分成数字并相加(例如,24变为2+4)。然后将结果相加并除以10,余数为0再次表明成功。