Sign Up for Free

RunKit +

Try any Node.js package right in your browser

This is a playground to test code. It runs a full Node.js environment and already has all of npm’s 1,000,000+ packages pre-installed, including ifsc with all npm packages installed. Try it out:

var ifsc = require("ifsc")

This service is provided by RunKit and is not affiliated with npm, Inc or the package authors.

ifsc v1.5.5

This is part of the IFSC toolset released by Razorpay. You can find more details about the entire release at []( Includes only a validation library as of now.


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

wercker status License: MIT PRs Welcome

npm version Gem Version PHP version Hex pm


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

The latest build pipeline on Wercker should result in a container with the complete dataset as well.


The source for the dataset are the following files:



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" pull it in as a dependency.


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.


$ npm install ifsc

Support Matrix

Only the latest version of each SDK is considered.

LanguageValidationAPI ClientSublet Support (Custom)Bank Constants
PHP✅ (✅)
Ruby✅ (✅)
Elixir✅ (❎)
Node.js❎ (❎)

API Documentation

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



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


// 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->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


var ifsc = require('ifsc');

ifsc.validate('KKBK0000261'); // returns true
ifsc.validate('BOTM0XEEMRA'); // returns false

ifsc.fetchDetails('KKBK0000261').then(function(res) {

console.log(; // prints PUNB
// Prints the entire JSON from
// res is an object, not string


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


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 = 'KKBK0000261'

# result
# => true
# => "Kotak Mahindra Bank"
# => "GURGAON"
# => "4131000"
# => "GURGAON"
# => "GURGAON"
# => "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 = '...'; code.get

# these raise `Razorpay::IFSC::ServerError` if there is an error
# communicating with the server
Razorpay::IFSC::IFSC.find '...'
code = '...'; code.get



Online validation

iex> IFSC.get("KKBK0000261")
   bank: "Kotak Mahindra Bank",
   bank_code: "KKBK",
   branch: "GURGAON",
   city: "GURGAON",
   contact: "4131000",
   district: "GURGAON",
   ifsc: "KKBK0000261",
   rtgs: true,
   state: "HARYANA"

iex> IFSC.get("foobar")
{:error, :invalid_ifsc}

Offline validation

iex> IFSC.validate("KKBK0000261")
   address: nil,
   bank: "Kotak Mahindra Bank",
   bank_code: "KKBK",
   branch: nil,
   city: nil,
   contact: nil,
   district: nil,
   ifsc: "KKBK0000261",
   rtgs: nil,
   state: nil

iex> IFSC.validate("foobar")
{:error, :invalid_format}

iex> IFSC.validate("AAAA0000000")
{:error, :invalid_bank_code}

iex(> IFSC.validate("HDFC0000000")
{:error, :invalid_branch_code}

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


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.

RunKit is a free, in-browser JavaScript dev environment for prototyping Node.js code, with every npm package installed. Sign up to share your code.
Sign Up for Free