ifsc

    2.0.1 • Public • Published

    ifsc

    This is part of the IFSC toolset released by Razorpay. You can find more details about the entire release at ifsc.razorpay.com.

    License: MIT PRs Welcome

    npm version Gem Version PHP version Hex pm

    Dataset

    If you are just looking for the dataset, go to the releases section and download the latest release.

    The latest scraper workflow on GitHub should publish a release-artifact as well.

    Source

    The source for the dataset are the following files:

    SWIFT

    SWIFT/BIC codes are supported for a few banks.

    SBI
    PNB
    HDFC

    Installation

    Ruby

    Add this line to your application's Gemfile:

    gem "ifsc"

    And then execute:

    $ bundle

    Or install it yourself as:

    $ gem install ifsc

    Inside of your Ruby program do:

    require "ifsc"

    ...to pull it in as a dependency.

    PHP

    composer require php-http/curl-client razorpay/ifsc

    The PHP package has a dependency on the virtual package php-http/client-implementation which requires you to install an adapter, but we do not care which one. That is an implementation detail in your application. You do not have to use the php-http/curl-client if you do not want to. You may use the php-http/guzzle6-adapter. Read more about the virtual packages, why this is a good idea and about the flexibility it brings at the HTTPlug docs. You can find a list of suported providers on packagist.

    The minimum PHP version supported is 7.2.

    Node.js

    $ npm install ifsc

    Go

    This package is compatible with modern Go releases in module mode, with Go installed:

    go get github.com/razorpay/ifsc/v2

    will resolve and add the package to the current development module, along with its dependencies.

    Alternatively the same can be achieved if you use import in a package:

    import "github.com/razorpay/ifsc/v2/src/go"

    and run go get without parameters.

    Finally, to use the top-of-trunk version of this repo, use the following command:

    go get github.com/razorpay/ifsc/v2@master

    Support Matrix

    Only the latest version of each SDK is considered.

    Language Validation API Client Sublet Support (Custom) Bank Constants
    PHP ()
    Ruby ()
    Node.js ()
    Go ()

    API Documentation

    This repository also hosts the source code for 5 modules: PHP/Node.js/Ruby/Go as of now. The API is documented below:

    PHP

    <?php
    
    use Razorpay\IFSC\Bank;
    use Razorpay\IFSC\IFSC;
    use Razorpay\IFSC\Client;
    
    IFSC::validate('KKBK0000261'); // Returns true
    IFSC::validate('BOTM0XEEMRA'); // Returns false
    
    IFSC::validateBankCode('PUNB'); // Returns true
    IFSC::validateBankCode('ABCD'); // Returns false
    
    IFSC::getBankName('PUNB'); // Returns 'Punjab National Bank'
    IFSC::getBankName('ABCD'); // Returns null
    
    IFSC::getBankName(Bank::PUNB); //Returns Punjab National Bank
    
    Bank::getDetails(Bank::PUNB);
    Bank::getDetails('PUNB');
    
    // Returns an array:
    // [
    //    'code' => 'PUNB',
    //    'type' => 'PSB',
    //    'ifsc' => 'PUNB0244200',
    //    'micr' => '110024001',
    //    'iin' => '508568',
    //    'apbs' => true,
    //    'ach_credit' => true,
    //    'ach_debit' => true,
    //    'nach_debit' => true,
    //    'name' => 'Punjab National Bank',
    //    'bank_code' => '024',
    //    'upi' => true
    // ]
    
    $client = new Client();
    $res = $client->lookupIFSC('KKBK0000261');
    
    echo $res->bank; // 'KOTAK MAHINDRA BANK LIMITED'
    echo $res->branch; // 'GURGAON'
    echo $res->address; // 'JMD REGENT SQUARE,MEHRAULI GURGAON ROAD,OPPOSITE BRISTOL HOTEL,'
    echo $res->contact; // '4131000'
    echo $res->city; // 'GURGAON'
    echo $res->district; // 'GURGAON'
    echo $res->state; // 'HARYANA'
    echo $res->getBankCode(); // KKBK
    echo $res->getBankName(); // 'Kotak Mahindra Bank'
    
    // lookupIFSC may throw `Razorpay\IFSC\Exception\ServerError`
    // in case of server not responding in time
    // or Razorpay\IFSC\Exception\InvalidCode in case
    // the IFSC code is invalid

    Node.js

    var ifsc = require('ifsc');
    
    ifsc.validate('KKBK0000261'); // returns true
    ifsc.validate('BOTM0XEEMRA'); // returns false
    
    ifsc.fetchDetails('KKBK0000261').then(function(res) {
       console.log(res);
    });
    
    console.log(ifsc.bank.PUNB); // prints PUNB
    // Prints the entire JSON from https://ifsc.razorpay.com/KKBK0000261
    // res is an object, not string

    Ruby

    Make sure you have require 'ifsc' in your code. Validating a code offline. (Remember to keep the gem up to date!)

    # valid?
    
    Razorpay::IFSC::IFSC.valid? 'KKBK0000261' # => true
    Razorpay::IFSC::IFSC.valid? 'BOTM0XEEMRA' # => false
    
    # validate!
    
    Razorpay::IFSC::IFSC.validate! 'KKBK0000261' # => true
    Razorpay::IFSC::IFSC.validate! 'BOTM0XEEMRA' # => Razorpay::IFSC::InvalidCodeError
    
    # bank_name_for(code) gets you the bank name offline
    Razorpay::IFSC::IFSC.bank_name_for 'PUNB0026200' -> "Punjab National Bank"
    Razorpay::IFSC::IFSC.bank_name_for 'KSCB0006001' -> "Tumkur District Central Bank"
    
    # get_details gets you the bank details from `banks.json`
    Razorpay::IFSC::Bank.get_details 'PUNB'
    {
       code: 'PUNB',
       type: 'PSB',
       ifsc: 'PUNB0244200',
       micr: '110024001',
       bank_code: '024',
       iin: '508568',
       apbs: true,
       ach_credit: true,
       ach_debit: true,
       nach_debit: true
    }
    
    # constants
    
    Razorpay::IFSC::Bank::PUNB
    'PUNB'

    Validate online and retrieve details from the server

    If you call code.valid? before calling code.get, the validation will be performed offline.

    # 1. using find
    code = Razorpay::IFSC::IFSC.find 'KKBK0000261'
    
    # 2. using new(...).get
    code = Razorpay::IFSC::IFSC.new 'KKBK0000261'
    code.get
    
    # result
    code.valid?
    # => true
    code.bank
    # => "Kotak Mahindra Bank"
    code.branch
    # => "GURGAON"
    code.address
    # => "JMD REGENT SQUARE,MEHRAULI GURGAON ROAD,OPPOSITE BRISTOL HOTEL,"
    code.contact
    # => "4131000"
    code.city
    # => "GURGAON"
    code.district
    # => "GURGAON"
    code.state
    # => "HARYANA"

    Sublet Branches

    You can use the code.bank_name method to get the bank name considering sublet branches.

    code = Razorpay::IFSC::IFSC.find 'HDFC0CKUB01'
    code.bank_name "Khamgaon Urban Co-operative Bank"

    This works offline, and doesn't need a network call. This information is stored across 2 files:

    1. src/sublet.json - Autogenerated from the NPCI website
    2. src/custom-sublets.json - Maintained manually. Coverage is not 100%. PRs are welcome.

    Sublet (or Sub-Member) branches are IFSC codes belonging to a large bank, but leased out to smaller banks. In some cases, entire ranges are given to a specific bank. For eg, all IFSCs starting with YESB0TSS belong to Satara Shakari Bank. These are maintained manually in custom-sublets.json.

    Error handling

    # all these `Razorpay::IFSC::InvalidCodeError` for an invalid code
    Razorpay::IFSC::IFSC.validate! '...'
    Razorpay::IFSC::IFSC.find '...'
    code = Razorpay::IFSC::IFSC.new '...'; code.get
    
    # these raise `Razorpay::IFSC::ServerError` if there is an error
    # communicating with the server
    Razorpay::IFSC::IFSC.find '...'
    code = Razorpay::IFSC::IFSC.new '...'; code.get

    Go

    package main
    
    import (
    	ifsc "github.com/razorpay/ifsc/src/go"
    )
    
    // todo: change funcs not required to lower case.
    
    func main() {
    
    	ifsc.Validate("KKBK0000261") // Returns true
    	ifsc.Validate("BOTM0XEEMRA") // Returns false
    
    	ifsc.ValidateBankCode("PUNB") // Returns true
    	ifsc.ValidateBankCode("ABCD") // Returns false
    
    	ifsc.GetBankName("PUNB") // Returns "Punjab National Bank", nil
    	ifsc.GetBankName("ABCD") // Returns "", errors.New(invalid bank code)
    	ifsc.GetBankName(ifsc.HDFC) // Returns "HDFC Bank", nil
    
    
    	ifsc.GetBankDetails("PUNB")
    	// or
    	ifsc.GetBankDetails(ifsc.PUNB)
    
    	/* Returns
    		(*ifsc.Bank){
    		Name	  : "Punjab National Bank",
    		BankCode  : "024",
    		Code	  : "PUNB",
    		Type	  : "PSB",
    		IFSC	  : "PUNB0244200",
    		MICR      : "110024001",
    		IIN       : "508568",
    		APBS      : true,
    		AchCredit : true,
    		AchDebit  : true,
    		NachDebit : true,
    		Upi       : true
    	}), nil
    	*/
    
    	ifsc.LookUP("KKBK0000261")
    
    	/*
    	Returns
    	(*ifsc.IFSCResponse)({
    	 Bank	  :  "Kotak Mahindra Bank",
    	 Branch	  :  "GURGAON",
    	 Address  :  "JMD REGENT SQUARE,MEHRAULI GURGAON ROAD,OPPOSITE BRISTOL HOTEL,",
    	 Contact  :  "4131000",
    	 City	  :  "GURGAON",
    	 District :  "GURGAON",
    	 State	  :  "HARYANA",
    	 IFSC	  :  "KKBK0000261",
    	 BankCode :  "KKBK"
    	}), nil
    	 */
    }

    Code Notes

    Both the packages ship with a 300kb JSON file, that includes the entire list of IFSC codes, in a compressed, but human-readable format.

    The Bank Code and Names list is maintained manually, but verified with tests to be accurate as per the latest RBI publications. This lets us add older Bank codes to the name list, without worrying about them getting deleted in newer builds.

    API Development

    The IFSC API is maintained in a separate repository at https://github.com/razorpay/ifsc-api.

    License

    The code in this repository is licensed under the MIT License. License text is available in the LICENSE file. The dataset itself is under public domain.

    Install

    npm i ifsc

    DownloadsWeekly Downloads

    806

    Version

    2.0.1

    License

    MIT

    Unpacked Size

    1.42 MB

    Total Files

    13

    Last publish

    Collaborators

    • captn3m0
    • razorpay-dev