Skip to content

devangmehta123/moduluschecking

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

34 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Travis CI Software License GoDoc Coverage Status

Modulus checking

Modulus checking is a procedure for validating sort code and account number combinations. It doesn't confirm that an account belongs to a customer or supports Direct Debit.

If you want to know more about modulus checking, read this GoCardless guide.

Validity

This package follows the Vocalink specification, version 3.90, that will be live on 13/06/2016. More information about the specification can be seen on the Vocalink website.

API

If you prefer to send request to a web service, take a look at the package moduluschecking-api that offers an API to validate UK bank account numbers, supporting authentication and rate limits.

Institution covered

The following institutions are supported:

Institution name Institution name Institution name
Allied Irish Bank of England Bank of Ireland
Bank of Scotland Barclays Bradford and Bingley Building Society
Charity Bank Citibank Clydesdale
Co-Operative Bank Coutts First Trust
Halifax Hoares Bank HSBC
Metro Bank NatWest Nationwide Building Society
Northern Orwell Union Ltd Royal Bank of Scotland
Santander Secure Trust Tesco Bank
TSB Ulster Bank Unity Trust Bank
Virgin Bank Woolwich Williams & Glyn
Yorkshire Bank - -

Included data files

This package ships with the latest version of the modulus weight table data and the sorting code substitution data. Both files can be found in the data folder.

Getting started

You can grab this package with the following command:

go get github.com/AntoineAugusti/moduluschecking/...

Usage

If you wanna use the default file parser:

package main

import (
    "fmt"

    "github.com/AntoineAugusti/moduluschecking/models"
    "github.com/AntoineAugusti/moduluschecking/parsers"
    "github.com/AntoineAugusti/moduluschecking/resolvers"
)

func main() {
    // Read the modulus weight table and the sorting
    // code substitution table from the folder data
    parser := parsers.CreateFileParser()

    // The resolver handles the verification of the validity of
    // bank accounts according to the data obtained by the parser
    resolver := resolvers.NewResolver(parser)

    // This helper method handles special cases for
    // bank accounts from:
    // - National Westminster Bank plc (10 or 11 digits with possible presence of dashes, for account numbers)
    // - Co-Operative Bank plc (10 digits for account numbers)
    // - Santander (9 digits for account numbers)
    // - banks with 6 or 7 digits for account numbers
    bankAccount := models.CreateBankAccount("089999", "66374958")

    // Check if the created bank account is valid against the rules
    fmt.Println(resolver.IsValid(bankAccount))
}

Benchmark

On my personal laptop (MacBook Pro, Core i5 2.5 Ghz, 8 GB of RAM with a SSD):

  • reading data files from the filesytem by creating the parser and the resolver: ~350 ms
  • checking the validity of 1,000 bank account numbers: ~7 ms

About

Check that a UK bank account number is valid

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Go 100.0%