talks/ifsc/index.html

635 lines
120 KiB
HTML
Raw Normal View History

2020-02-06 10:13:17 +00:00
<!DOCTYPE html><html lang="en-US"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width,height=device-height,initial-scale=1.0"><meta name="apple-mobile-web-app-capable" content="yes"><meta http-equiv="X-UA-Compatible" content="ie=edge"><meta property="og:type" content="website"><meta name="twitter:card" content="summary"><style>.bespoke-marp-note,.bespoke-marp-osc,.bespoke-progress-parent{display:none;-webkit-transition:none;transition:none}@media screen{body[data-bespoke-view=""] .bespoke-marp-parent>.bespoke-marp-osc>button,body[data-bespoke-view=next] .bespoke-marp-parent>.bespoke-marp-osc>button,body[data-bespoke-view=presenter] .bespoke-marp-presenter-container .bespoke-marp-presenter-info-container button{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent;border:0;color:inherit;cursor:pointer;font-size:inherit;opacity:.8;outline:none;padding:0;-webkit-transition:opacity .2s linear;transition:opacity .2s linear;-webkit-tap-highlight-color:transparent}body[data-bespoke-view=""] .bespoke-marp-parent>.bespoke-marp-osc>button:disabled,body[data-bespoke-view=next] .bespoke-marp-parent>.bespoke-marp-osc>button:disabled,body[data-bespoke-view=presenter] .bespoke-marp-presenter-container .bespoke-marp-presenter-info-container button:disabled{cursor:not-allowed;opacity:.15!important}body[data-bespoke-view=""] .bespoke-marp-parent>.bespoke-marp-osc>button:hover,body[data-bespoke-view=next] .bespoke-marp-parent>.bespoke-marp-osc>button:hover,body[data-bespoke-view=presenter] .bespoke-marp-presenter-container .bespoke-marp-presenter-info-container button:hover{opacity:1}body[data-bespoke-view=""] .bespoke-marp-parent>.bespoke-marp-osc>button:hover:active,body[data-bespoke-view=next] .bespoke-marp-parent>.bespoke-marp-osc>button:hover:active,body[data-bespoke-view=presenter] .bespoke-marp-presenter-container .bespoke-marp-presenter-info-container button:hover:active{opacity:.6}body[data-bespoke-view=""] .bespoke-marp-parent>.bespoke-marp-osc>button:hover:not(:disabled),body[data-bespoke-view=next] .bespoke-marp-parent>.bespoke-marp-osc>button:hover:not(:disabled),body[data-bespoke-view=presenter] .bespoke-marp-presenter-container .bespoke-marp-presenter-info-container button:hover:not(:disabled){-webkit-transition:none;transition:none}body[data-bespoke-view=""] .bespoke-marp-parent>.bespoke-marp-osc>button[data-bespoke-marp-osc=prev],body[data-bespoke-view=next] .bespoke-marp-parent>.bespoke-marp-osc>button[data-bespoke-marp-osc=prev],body[data-bespoke-view=presenter] .bespoke-marp-presenter-container .bespoke-marp-presenter-info-container button.bespoke-marp-presenter-info-page-prev{background:transparent url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMDAgMTAwIj48cGF0aCBmaWxsPSJub25lIiBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSI1IiBkPSJNNjggOTBMMjggNTBsNDAtNDAiLz48L3N2Zz4=") no-repeat 50%;background-size:contain;overflow:hidden;text-indent:100%;white-space:nowrap}body[data-bespoke-view=""] .bespoke-marp-parent>.bespoke-marp-osc>button[data-bespoke-marp-osc=next],body[data-bespoke-view=next] .bespoke-marp-parent>.bespoke-marp-osc>button[data-bespoke-marp-osc=next],body[data-bespoke-view=presenter] .bespoke-marp-presenter-container .bespoke-marp-presenter-info-container button.bespoke-marp-presenter-info-page-next{background:transparent url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMDAgMTAwIj48cGF0aCBmaWxsPSJub25lIiBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSI1IiBkPSJNMzIgOTBsNDAtNDAtNDAtNDAiLz48L3N2Zz4=") no-repeat 50%;background-size:contain;overflow:hidden;text-indent:100%;white-space:nowrap}body[data-bespoke-view=""] .bespoke-marp-parent>.bespoke-marp-osc>button[data-bespoke-marp-osc=fullscreen],body[data-bespoke-view=next] .bespoke-marp-parent>.bespoke-marp-osc>button[data-bespoke-marp-osc=fullscreen]{background:transparent url("data:image
/*!
* Marp default theme.
*
* @theme default
* @author Yuki Hattori
*
* @auto-scaling true
* @size 4:3 960px 720px
*/div#p>svg>foreignObject>section .octicon{display:inline-block;fill:currentColor;vertical-align:text-bottom}div#p>svg>foreignObject>section .anchor{float:left;line-height:1;margin-left:-20px;padding-right:4px}div#p>svg>foreignObject>section .anchor:focus{outline:none}div#p>svg>foreignObject>section h1 .octicon-link,div#p>svg>foreignObject>section h2 .octicon-link,div#p>svg>foreignObject>section h3 .octicon-link,div#p>svg>foreignObject>section h4 .octicon-link,div#p>svg>foreignObject>section h5 .octicon-link,div#p>svg>foreignObject>section h6 .octicon-link{color:#1b1f23;vertical-align:middle;visibility:hidden}div#p>svg>foreignObject>section h1:hover .anchor,div#p>svg>foreignObject>section h2:hover .anchor,div#p>svg>foreignObject>section h3:hover .anchor,div#p>svg>foreignObject>section h4:hover .anchor,div#p>svg>foreignObject>section h5:hover .anchor,div#p>svg>foreignObject>section h6:hover .anchor{text-decoration:none}div#p>svg>foreignObject>section h1:hover .anchor .octicon-link,div#p>svg>foreignObject>section h2:hover .anchor .octicon-link,div#p>svg>foreignObject>section h3:hover .anchor .octicon-link,div#p>svg>foreignObject>section h4:hover .anchor .octicon-link,div#p>svg>foreignObject>section h5:hover .anchor .octicon-link,div#p>svg>foreignObject>section h6:hover .anchor .octicon-link{visibility:visible}div#p>svg>foreignObject>section{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;color:#24292e;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;font-size:16px;line-height:1.5;word-wrap:break-word}div#p>svg>foreignObject>section .pl-c{color:#6a737d}div#p>svg>foreignObject>section .pl-c1,div#p>svg>foreignObject>section .pl-s .pl-v{color:#005cc5}div#p>svg>foreignObject>section .pl-e,div#p>svg>foreignObject>section .pl-en{color:#6f42c1}div#p>svg>foreignObject>section .pl-s .pl-s1,div#p>svg>foreignObject>section .pl-smi{color:#24292e}div#p>svg>foreignObject>section .pl-ent{color:#22863a}div#p>svg>foreignObject>section .pl-k{color:#d73a49}div#p>svg>foreignObject>section .pl-pds,div#p>svg>foreignObject>section .pl-s,div#p>svg>foreignObject>section .pl-s .pl-pse .pl-s1,div#p>svg>foreignObject>section .pl-sr,div#p>svg>foreignObject>section .pl-sr .pl-cce,div#p>svg>foreignObject>section .pl-sr .pl-sra,div#p>svg>foreignObject>section .pl-sr .pl-sre{color:#032f62}div#p>svg>foreignObject>section .pl-smw,div#p>svg>foreignObject>section .pl-v{color:#e36209}div#p>svg>foreignObject>section .pl-bu{color:#b31d28}div#p>svg>foreignObject>section .pl-ii{background-color:#b31d28;color:#fafbfc}div#p>svg>foreignObject>section .pl-c2{background-color:#d73a49;color:#fafbfc}div#p>svg>foreignObject>section .pl-c2:before{content:"^M"}div#p>svg>foreignObject>section .pl-sr .pl-cce{color:#22863a;font-weight:700}div#p>svg>foreignObject>section .pl-ml{color:#735c0f}div#p>svg>foreignObject>section .pl-mh,div#p>svg>foreignObject>section .pl-mh .pl-en,div#p>svg>foreignObject>section .pl-ms{color:#005cc5;font-weight:700}div#p>svg>foreignObject>section .pl-mi{color:#24292e;font-style:italic}div#p>svg>foreignObject>section .pl-mb{color:#24292e;font-weight:700}div#p>svg>foreignObject>section .pl-md{background-color:#ffeef0;color:#b31d28}div#p>svg>foreignObject>section .pl-mi1{background-color:#f0fff4;color:#22863a}div#p>svg>foreignObject>section .pl-mc{background-color:#ffebda;color:#e36209}div#p>svg>foreignObject>section .pl-mi2{background-color:#005cc5;color:#f6f8fa}div#p>svg>foreignObject>section .pl-mdr{color:#6f42c1;font-weight:700}div#p>svg>foreignObject>section .pl-ba{color:#586069}div#p>svg>foreignObject>section .pl-sg{color:#959da5}div#p>svg>foreignObject>section .pl-corl{color:#032f62;text-decoration:underline}div#p>svg>foreignObject>section details{display:block}div#p>svg>foreignObject>section summary{display:list-item}div#p>svg>foreignObject>section a{background-color:transparent}div#p>svg>foreignObject>section a:active,div#p>svg>foreignObject>section a:hover{outline-width:0}div#p>svg>foreignObject>section strong{font-weight:inherit;font-weight:bolder}div#p>
/* content:""; */display:table}div#p>svg>foreignObject>section:after{clear:both}div#p>svg>foreignObject>section>:first-child{margin-top:0!important}div#p>svg>foreignObject>section>:last-child{margin-bottom:0!important}div#p>svg>foreignObject>section a:not([href]){color:inherit;text-decoration:none}div#p>svg>foreignObject>section blockquote,div#p>svg>foreignObject>section dl,div#p>svg>foreignObject>section ol,div#p>svg>foreignObject>section p,div#p>svg>foreignObject>section pre,div#p>svg>foreignObject>section table,div#p>svg>foreignObject>section ul{margin-bottom:16px;margin-top:0}div#p>svg>foreignObject>section hr{background-color:#e1e4e8;border:0;height:.25em;margin:24px 0;padding:0}div#p>svg>foreignObject>section blockquote{border-left:.25em solid #dfe2e5;color:#6a737d;padding:0 1em}div#p>svg>foreignObject>section blockquote>:first-child{margin-top:0}div#p>svg>foreignObject>section blockquote>:last-child{margin-bottom:0}div#p>svg>foreignObject>section kbd{border:1px solid #c6cbd1;border-bottom-color:#959da5;box-shadow:inset 0 -1px 0 #959da5;font-size:11px}div#p>svg>foreignObject>section h1,div#p>svg>foreignObject>section h2,div#p>svg>foreignObject>section h3,div#p>svg>foreignObject>section h4,div#p>svg>foreignObject>section h5,div#p>svg>foreignObject>section h6{font-weight:600;line-height:1.25;margin-bottom:16px;margin-top:24px}div#p>svg>foreignObject>section h1{font-size:2em}div#p>svg>foreignObject>section h1,div#p>svg>foreignObject>section h2{border-bottom:1px solid #eaecef;padding-bottom:.3em}div#p>svg>foreignObject>section h2{font-size:1.5em}div#p>svg>foreignObject>section h3{font-size:1.25em}div#p>svg>foreignObject>section h4{font-size:1em}div#p>svg>foreignObject>section h5{font-size:.875em}div#p>svg>foreignObject>section h6{color:#6a737d;font-size:.85em}div#p>svg>foreignObject>section ol,div#p>svg>foreignObject>section ul{padding-left:2em}div#p>svg>foreignObject>section ol ol,div#p>svg>foreignObject>section ol ul,div#p>svg>foreignObject>section ul ol,div#p>svg>foreignObject>section ul ul{margin-bottom:0;margin-top:0}div#p>svg>foreignObject>section li{word-wrap:break-all}div#p>svg>foreignObject>section li>p{margin-top:16px}div#p>svg>foreignObject>section li+li{margin-top:.25em}div#p>svg>foreignObject>section dl{padding:0}div#p>svg>foreignObject>section dl dt{font-size:1em;font-style:italic;font-weight:600;margin-top:16px;padding:0}div#p>svg>foreignObject>section dl dd{margin-bottom:16px;padding:0 16px}div#p>svg>foreignObject>section table{display:block;overflow:auto;width:100%}div#p>svg>foreignObject>section table th{font-weight:600}div#p>svg>foreignObject>section table td,div#p>svg>foreignObject>section table th{border:1px solid #dfe2e5;padding:6px 13px}div#p>svg>foreignObject>section table tr{background-color:#fff;border-top:1px solid #c6cbd1}div#p>svg>foreignObject>section table tr:nth-child(2n){background-color:#f6f8fa}div#p>svg>foreignObject>section img{background-color:#fff;box-sizing:content-box;max-width:100%}div#p>svg>foreignObject>section img[align=right]{padding-left:20px}div#p>svg>foreignObject>section img[align=left]{padding-right:20px}div#p>svg>foreignObject>section code{background-color:rgba(27,31,35,.05);border-radius:3px;font-size:85%;margin:0;padding:.2em .4em}div#p>svg>foreignObject>section pre{word-wrap:normal}div#p>svg>foreignObject>section pre>code{background:transparent;border:0;font-size:100%;margin:0;padding:0;white-space:pre;word-break:normal}div#p>svg>foreignObject>section .highlight{margin-bottom:16px}div#p>svg>foreignObject>section .highlight pre{margin-bottom:0;word-break:normal}div#p>svg>foreignObject>section pre{background-color:#f6f8fa;border-radius:3px;font-size:85%;line-height:1.45;overflow:auto;padding:16px}div#p>svg>foreignObject>section pre code{background-color:transparent;border:0;display:inline;line-height:inherit;margin:0;max-width:auto;overflow:visible;padding:0;word-wrap:normal}div#p>svg>foreignObject>section .commit-tease-sha{color:#444d56;display:inline-block;font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-size:90%}div#p>svg>foreignO
<h1>things nobody ever tells you about IFSC</h1>
<p>-nemo</p>
</section>
</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="2" data-paginate="true" data-marpit-pagination="2" data-marpit-pagination-total="65" style="--paginate:true;">
<h1>Q: What does IFSC stand for?</h1>
</section>
</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section data-paginate="true" data-marpit-pagination="3" data-marpit-pagination-total="65" style="--paginate:true;" data-marpit-advanced-background="background"><div data-marpit-advanced-background-container="true" data-marpit-advanced-background-direction="horizontal"><figure style="background-image:url(&quot;https://fakeimg.pl/1920x800/ff4d4d/fff/?text=wrong&quot;);"></figure></div></section></foreignObject><foreignObject width="1280" height="720"><section id="3" data-paginate="true" data-marpit-pagination="3" data-marpit-pagination-total="65" style="--paginate:true;" data-marpit-advanced-background="content">
<h1></h1>
</section>
</foreignObject><foreignObject width="1280" height="720" data-marpit-advanced-background="pseudo"><section style="" data-marpit-advanced-background="pseudo" data-marpit-pagination="3" data-marpit-pagination-total="65"></section></foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="4" data-paginate="true" data-marpit-pagination="4" data-marpit-pagination-total="65" style="--paginate:true;">
<h2><strong>International Financial Services Centre</strong></h2>
<p>(Only partly kidding: <a href="https://www.rbi.org.in/Scripts/NotificationUser.aspx?Id=9619&amp;Mode=0">https://www.rbi.org.in/Scripts/NotificationUser.aspx?Id=9619&amp;Mode=0</a>)</p>
<blockquote>
<p>In exercise of the powers conferred by section 47 of the Foreign Exchange Management Act, 1999 (42 of 1999), the Reserve Bank makes the following regulations relating to financial institutions set up in International Financial Services Centres, namely:-</p>
<blockquote>
<p>(f) International Financial Services Centre or IFSC shall have the same meaning given in Section 2 (q) of the Special Economic Zones Act, 2005 (28 of 2005).</p>
</blockquote>
</blockquote>
</section>
</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="5" data-paginate="true" data-marpit-pagination="5" data-marpit-pagination-total="65" style="--paginate:true;">
<h2>Fine!</h2>
<p><strong>Indian Financial System Code</strong></p>
</section>
</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="6" data-paginate="true" data-marpit-pagination="6" data-marpit-pagination-total="65" style="--paginate:true;">
<h2>some metrics first</h2>
<ul>
<li>4 Years since first release</li>
<li>64 releases</li>
<li>72 tags</li>
</ul>
<pre><code><svg data-marp-fitting="svg" data-marp-fitting-code><foreignObject><span data-marp-fitting-svg-content><span data-marp-fitting-svg-content-wrap><span class="hljs-string">-------------------------------------------------------------------------------</span>
<span class="hljs-string">Language</span> <span class="hljs-string">files</span> <span class="hljs-string">blank</span> <span class="hljs-string">comment</span> <span class="hljs-string">code</span>
<span class="hljs-string">-------------------------------------------------------------------------------</span>
<span class="hljs-string">PHP</span> <span class="hljs-number">13</span> <span class="hljs-number">175</span> <span class="hljs-number">68</span> <span class="hljs-number">2063</span>
<span class="hljs-string">Ruby</span> <span class="hljs-number">9</span> <span class="hljs-number">111</span> <span class="hljs-number">23</span> <span class="hljs-number">2008</span>
<span class="hljs-string">JavaScript</span> <span class="hljs-number">5</span> <span class="hljs-number">26</span> <span class="hljs-number">1</span> <span class="hljs-number">1548</span>
<span class="hljs-string">YAML</span> <span class="hljs-number">5</span> <span class="hljs-number">4</span> <span class="hljs-number">24</span> <span class="hljs-number">1256</span>
<span class="hljs-string">Markdown</span> <span class="hljs-number">4</span> <span class="hljs-number">157</span> <span class="hljs-number">0</span> <span class="hljs-number">383</span>
<span class="hljs-string">Elixir</span> <span class="hljs-number">8</span> <span class="hljs-number">53</span> <span class="hljs-number">63</span> <span class="hljs-number">308</span>
<span class="hljs-string">Bourne</span> <span class="hljs-string">Shell</span> <span class="hljs-number">2</span> <span class="hljs-number">10</span> <span class="hljs-number">13</span> <span class="hljs-number">31</span>
<span class="hljs-string">XML</span> <span class="hljs-number">1</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">16</span>
<span class="hljs-string">-------------------------------------------------------------------------------</span>
<span class="hljs-attr">SUM:</span> <span class="hljs-number">47</span> <span class="hljs-number">536</span> <span class="hljs-number">192</span> <span class="hljs-number">7613</span>
<span class="hljs-string">-------------------------------------------------------------------------------</span>
</span></span></foreignObject></svg></code></pre>
</section>
</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section data-paginate="true" data-marpit-pagination="7" data-marpit-pagination-total="65" style="--paginate:true;" data-marpit-advanced-background="background"><div data-marpit-advanced-background-container="true" data-marpit-advanced-background-direction="horizontal"><figure style="background-image:url(&quot;0.1.7.png&quot;);background-size:80%;"></figure></div></section></foreignObject><foreignObject width="1280" height="720"><section id="7" data-paginate="true" data-marpit-pagination="7" data-marpit-pagination-total="65" style="--paginate:true;" data-marpit-advanced-background="content">
<h2>0.1.7</h2>
</section>
</foreignObject><foreignObject width="1280" height="720" data-marpit-advanced-background="pseudo"><section style="" data-marpit-advanced-background="pseudo" data-marpit-pagination="7" data-marpit-pagination-total="65"></section></foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section data-paginate="true" data-marpit-pagination="8" data-marpit-pagination-total="65" style="--paginate:true;" data-marpit-advanced-background="background"><div data-marpit-advanced-background-container="true" data-marpit-advanced-background-direction="horizontal"><figure style="background-image:url(&quot;google-image-search.jpg&quot;);background-size:100%;"></figure></div></section></foreignObject><foreignObject width="1280" height="720"><section id="8" data-paginate="true" data-marpit-pagination="8" data-marpit-pagination-total="65" style="--paginate:true;" data-marpit-advanced-background="content"></section>
</foreignObject><foreignObject width="1280" height="720" data-marpit-advanced-background="pseudo"><section style="" data-marpit-advanced-background="pseudo" data-marpit-pagination="8" data-marpit-pagination-total="65"></section></foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="9" data-paginate="true" data-marpit-pagination="9" data-marpit-pagination-total="65" style="--paginate:true;">
<h1>the IFSC wall of cuteness</h1>
</section>
</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section data-paginate="true" data-marpit-pagination="10" data-marpit-pagination-total="65" style="--paginate:true;" data-marpit-advanced-background="background"><div data-marpit-advanced-background-container="true" data-marpit-advanced-background-direction="horizontal"><figure style="background-image:url(&quot;cute-collage.jpg&quot;);background-size:100%;"></figure></div></section></foreignObject><foreignObject width="1280" height="720"><section id="10" data-paginate="true" data-marpit-pagination="10" data-marpit-pagination-total="65" style="--paginate:true;" data-marpit-advanced-background="content"></section>
</foreignObject><foreignObject width="1280" height="720" data-marpit-advanced-background="pseudo"><section style="" data-marpit-advanced-background="pseudo" data-marpit-pagination="10" data-marpit-pagination-total="65"></section></foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="11" data-paginate="true" data-marpit-pagination="11" data-marpit-pagination-total="65" style="--paginate:true;">
<h1>what is it?</h1>
<p>The IFSC Toolkit includes:</p>
<ol>
<li>An API, served publicly at <a href="https://ifsc.razorpay.com">https://ifsc.razorpay.com</a></li>
<li>A dataset, attached to every release in multiple formats</li>
<li>An SDK that does multiple things:
<ul>
<li>Offline IFSC validations</li>
<li>Requests to the API</li>
<li>Offline Bank checks</li>
</ul>
</li>
<li>In various languages: Node.JS/PHP/Ruby/Elixir</li>
</ol>
</section>
</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="12" data-paginate="true" data-marpit-pagination="12" data-marpit-pagination-total="65" style="--paginate:true;">
<h1>what's the source?</h1>
<h2>3 Primary Sources: RBI/NPCI/RTI</h2>
<p>RBI publishes a list of all RTGS/NEFT branches as excel sheets:</p>
<ul>
<li><a href="https://rbidocs.rbi.org.in/rdocs/content/docs/68774.xlsx">NEFT</a></li>
<li><a href="https://rbidocs.rbi.org.in/rdocs/RTGS/DOCs/RTGEB0815.xlsx">RTGS</a></li>
</ul>
<p>NPCI publishes a few lists:</p>
<ul>
<li><a href="https://www.npci.org.in/national-automated-clearing-live-members-1">All Live ACH member banks</a></li>
<li><a href="https://www.npci.org.in/upi-live-members">All UPI live member banks</a></li>
<li><a href="https://docplayer.net/25942453-Imps-procedural-guidelines.html">NBIN codes</a>, published in IMPS Procedural guidelines v1.7</li>
</ul>
</section>
</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section data-paginate="true" data-marpit-pagination="13" data-marpit-pagination-total="65" style="--paginate:true;" data-marpit-advanced-background="background"><div data-marpit-advanced-background-container="true" data-marpit-advanced-background-direction="horizontal"><figure style="background-image:url(&quot;https://fakeimg.pl/1920x800/c56cf0/fff/?text=what's+the+data&quot;);"></figure></div></section></foreignObject><foreignObject width="1280" height="720"><section id="13" data-paginate="true" data-marpit-pagination="13" data-marpit-pagination-total="65" style="--paginate:true;" data-marpit-advanced-background="content"></section>
</foreignObject><foreignObject width="1280" height="720" data-marpit-advanced-background="pseudo"><section style="" data-marpit-advanced-background="pseudo" data-marpit-pagination="13" data-marpit-pagination-total="65"></section></foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="14" data-paginate="true" data-marpit-pagination="14" data-marpit-pagination-total="65" style="--paginate:true;">
<h2><code>banks.json</code></h2>
<p>List of all Banks in India* with the following details:</p>
<ul>
<li>Bank Code (4 characters)</li>
<li>Bank Type</li>
<li>Primary IFSC (Usually of the IMPS HO Branch)</li>
<li>Primary MICR (Used on Cheques)</li>
<li>IIN (First 6 digits of issued cards)</li>
<li>ABPS Support (true/false)</li>
<li>NACH/ACH Credit/Debit Support (true/false)</li>
<li>UPI Support (true)</li>
</ul>
<p>* - Based on all members listed in the NPCI ACH list.</p>
</section>
</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="15" data-paginate="true" data-marpit-pagination="15" data-marpit-pagination-total="65" style="--paginate:true;">
<h1><code>by-bank.tar.gz</code> (8.4MB)</h1>
<p>A tar.gz file containing one JSON file for each bank, with a list of all known branches with the following details for every branch:</p>
<ul>
<li>IFSC</li>
<li>Branch name</li>
<li>Address (Centre/District/State/Address/Contact)</li>
<li>Bank Name</li>
<li>UPI Support (<code>true/false</code>)</li>
<li>RTGS Support (<code>true/false</code>)</li>
<li>NEFT Support (<code>true/false</code>)</li>
<li>IMPS Support (<code>true/false</code>)</li>
<li>MICR</li>
</ul>
</section>
</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="16" data-paginate="true" data-marpit-pagination="16" data-marpit-pagination-total="65" style="--paginate:true;">
<h1><code>IFSC-list.json</code> (4MB)</h1>
<p>A single JSON file with every known IFSC code inside it.</p>
</section>
</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="17" data-paginate="true" data-marpit-pagination="17" data-marpit-pagination-total="65" style="--paginate:true;">
<h1><code>IFSC.csv</code> (25MB)</h1>
<p>Single CSV file containing the same fields as the by-bank JSON file. Covers all banks.</p>
</section>
</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="18" data-paginate="true" data-marpit-pagination="18" data-marpit-pagination-total="65" style="--paginate:true;">
<h1><code>IFSC.json</code> (1.7MB)</h1>
<p>A somewhat-compressed, human-readable JSON file containing all valid IFSCs for a bank, with leading zeroes removed.</p>
<pre><code><svg data-marp-fitting="svg" data-marp-fitting-code><foreignObject><span data-marp-fitting-svg-content><span data-marp-fitting-svg-content-wrap><span class="hljs-string">"ADCC"</span>: [<span class="hljs-number">1</span>,<span class="hljs-number">2</span>,<span class="hljs-number">3</span>,<span class="hljs-number">4</span>,<span class="hljs-number">5</span>,<span class="hljs-number">6</span>,<span class="hljs-number">7</span>,<span class="hljs-number">8</span>,<span class="hljs-number">9</span>,<span class="hljs-number">10</span>,<span class="hljs-number">11</span>,<span class="hljs-number">12</span>,<span class="hljs-number">13</span>,<span class="hljs-number">14</span>,<span class="hljs-number">15</span>,<span class="hljs-number">16</span>,<span class="hljs-number">17</span>,<span class="hljs-number">18</span>,<span class="hljs-number">19</span>,<span class="hljs-number">20</span>
<span class="hljs-number">21</span>,<span class="hljs-number">22</span>,<span class="hljs-number">23</span>,<span class="hljs-number">24</span>,<span class="hljs-number">25</span>,<span class="hljs-number">26</span>,<span class="hljs-number">28</span>,<span class="hljs-number">29</span>,<span class="hljs-number">30</span>,<span class="hljs-number">31</span>,<span class="hljs-number">32</span>,<span class="hljs-number">33</span>,<span class="hljs-number">34</span>,<span class="hljs-number">35</span>,<span class="hljs-number">36</span>,<span class="hljs-number">37</span>,<span class="hljs-number">38</span>
<span class="hljs-number">39</span>,<span class="hljs-number">40</span>,<span class="hljs-number">41</span>,<span class="hljs-number">42</span>,<span class="hljs-number">43</span>,<span class="hljs-number">44</span>,<span class="hljs-number">45</span>,<span class="hljs-number">46</span>,<span class="hljs-number">47</span>,<span class="hljs-number">48</span>,<span class="hljs-number">49</span>,<span class="hljs-number">50</span>,<span class="hljs-number">51</span>,<span class="hljs-number">52</span>,<span class="hljs-number">53</span>,<span class="hljs-number">54</span>,<span class="hljs-number">55</span>
<span class="hljs-number">56</span>,<span class="hljs-number">57</span>,<span class="hljs-number">58</span>,<span class="hljs-number">59</span>,<span class="hljs-number">60</span>,<span class="hljs-number">61</span>,<span class="hljs-number">62</span>,<span class="hljs-number">64</span>,<span class="hljs-number">65</span>,<span class="hljs-number">66</span>,<span class="hljs-number">67</span>,<span class="hljs-number">68</span>,<span class="hljs-number">110</span>,<span class="hljs-number">114</span>,<span class="hljs-number">70</span>,<span class="hljs-number">71</span>
<span class="hljs-number">72</span>,<span class="hljs-number">73</span>,<span class="hljs-number">74</span>,<span class="hljs-number">75</span>,<span class="hljs-number">76</span>,<span class="hljs-number">77</span>,<span class="hljs-number">78</span>,<span class="hljs-number">79</span>,<span class="hljs-number">80</span>,<span class="hljs-number">81</span>,<span class="hljs-number">82</span>,<span class="hljs-number">83</span>,<span class="hljs-number">84</span>,<span class="hljs-number">85</span>,<span class="hljs-number">86</span>,<span class="hljs-number">87</span>
<span class="hljs-number">88</span>,<span class="hljs-number">89</span>,<span class="hljs-number">90</span>,<span class="hljs-number">91</span>,<span class="hljs-number">92</span>,<span class="hljs-number">93</span>,<span class="hljs-number">94</span>,<span class="hljs-number">95</span>,<span class="hljs-number">96</span>,<span class="hljs-number">97</span>,<span class="hljs-number">98</span>,<span class="hljs-number">99</span>,<span class="hljs-number">100</span>,<span class="hljs-number">101</span>,<span class="hljs-number">102</span>
<span class="hljs-number">103</span>,<span class="hljs-number">104</span>,<span class="hljs-number">105</span>,<span class="hljs-number">106</span>,<span class="hljs-number">107</span>,<span class="hljs-number">108</span>,<span class="hljs-number">109</span>,<span class="hljs-number">111</span>,<span class="hljs-number">112</span>,<span class="hljs-number">113</span>,<span class="hljs-number">115</span>,<span class="hljs-number">116</span>]
</span></span></foreignObject></svg></code></pre>
<p><code>ADCC0000001</code> to <code>ADCC0000116</code> are all valid branches.</p>
</section>
</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="19" data-paginate="true" data-marpit-pagination="19" data-marpit-pagination-total="65" style="--paginate:true;">
<h1><code>banknames.json</code></h1>
<p>A manually curated human-readable list of all banknames against 4 letter bank codes. Currently at 1425 entries.</p>
</section>
</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="20" data-paginate="true" data-marpit-pagination="20" data-marpit-pagination-total="65" style="--paginate:true;">
<h1>The API</h1>
<p>Has a single <code>/:ifsc</code> endpoint that returns all the information about the branch from the IFSC code. <a href="https://ifsc.razorpay.com/PUNB0026200">https://ifsc.razorpay.com/PUNB0026200</a></p>
<pre><code class="language-json"><svg data-marp-fitting="svg" data-marp-fitting-code><foreignObject><span data-marp-fitting-svg-content><span data-marp-fitting-svg-content-wrap>{
<span class="hljs-attr">"BRANCH"</span>: <span class="hljs-string">"KASHIPUR"</span>,
<span class="hljs-attr">"CENTRE"</span>: <span class="hljs-string">"KASHIPUR"</span>,
<span class="hljs-attr">"DISTRICT"</span>: <span class="hljs-string">"KASHIPUR (UTTARANCHAL)"</span>,
<span class="hljs-attr">"STATE"</span>: <span class="hljs-string">"UTTARAKHAND"</span>,
<span class="hljs-attr">"ADDRESS"</span>: <span class="hljs-string">"MATA MANDIR ROAD,DISTT. UDHAM SINGH NAGAR"</span>,
<span class="hljs-attr">"CONTACT"</span>: <span class="hljs-string">""</span>,
<span class="hljs-attr">"UPI"</span>: <span class="hljs-literal">true</span>,
<span class="hljs-attr">"RTGS"</span>: <span class="hljs-literal">true</span>,
<span class="hljs-attr">"CITY"</span>: <span class="hljs-string">"KASHIPUR (UTTARANCHAL)"</span>,
<span class="hljs-attr">"NEFT"</span>: <span class="hljs-literal">true</span>,
<span class="hljs-attr">"IMPS"</span>: <span class="hljs-literal">true</span>,
<span class="hljs-attr">"MICR"</span>: <span class="hljs-string">""</span>,
<span class="hljs-attr">"BANK"</span>: <span class="hljs-string">"Punjab National Bank"</span>,
<span class="hljs-attr">"BANKCODE"</span>: <span class="hljs-string">"PUNB"</span>,
<span class="hljs-attr">"IFSC"</span>: <span class="hljs-string">"PUNB0026200"</span>
}
</span></span></foreignObject></svg></code></pre>
</section>
</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="21" data-paginate="true" data-marpit-pagination="21" data-marpit-pagination-total="65" style="--paginate:true;">
<h2>Metrics</h2>
<p>It supports prometheus metrics over <code>/metrics</code>.</p>
</section>
</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="22" data-paginate="true" data-marpit-pagination="22" data-marpit-pagination-total="65" style="--paginate:true;">
<h2>Code Examples</h2>
<h3>PHP</h3>
<pre><code class="language-php"><svg data-marp-fitting="svg" data-marp-fitting-code><foreignObject><span data-marp-fitting-svg-content><span data-marp-fitting-svg-content-wrap>IFSC::validate(<span class="hljs-string">'KKBK0000261'</span>); <span class="hljs-comment">// true</span>
IFSC::validateBankCode(<span class="hljs-string">'PUNB'</span>); <span class="hljs-comment">// true</span>
IFSC::getBankName(<span class="hljs-string">'PUNB'</span>); <span class="hljs-comment">// Returns 'Punjab National Bank'</span>
IFSC::getBankName(<span class="hljs-string">'ABCD'</span>); <span class="hljs-comment">// Returns null</span>
IFSC::getBankName(Bank::PUNB); <span class="hljs-comment">//Returns Punjab National Bank</span>
</span></span></foreignObject></svg></code></pre>
</section>
</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="23" data-paginate="true" data-marpit-pagination="23" data-marpit-pagination-total="65" style="--paginate:true;">
<pre><code class="language-php"><svg data-marp-fitting="svg" data-marp-fitting-code><foreignObject><span data-marp-fitting-svg-content><span data-marp-fitting-svg-content-wrap>Bank::getDetails(Bank::PUNB);
Bank::getDetails(<span class="hljs-string">'PUNB'</span>);
<span class="hljs-comment">// Returns an array:</span>
<span class="hljs-comment">// [</span>
<span class="hljs-comment">// 'code' =&gt; 'PUNB',</span>
<span class="hljs-comment">// 'type' =&gt; 'PSB',</span>
<span class="hljs-comment">// 'ifsc' =&gt; 'PUNB0244200',</span>
<span class="hljs-comment">// 'micr' =&gt; '110024001',</span>
<span class="hljs-comment">// 'iin' =&gt; '508568',</span>
<span class="hljs-comment">// 'apbs' =&gt; true,</span>
<span class="hljs-comment">// 'ach_credit' =&gt; true,</span>
<span class="hljs-comment">// 'ach_debit' =&gt; true,</span>
<span class="hljs-comment">// 'nach_debit' =&gt; true,</span>
<span class="hljs-comment">// 'name' =&gt; 'Punjab National Bank',</span>
<span class="hljs-comment">// 'bank_code' =&gt; '024',</span>
<span class="hljs-comment">// 'upi' =&gt; true</span>
<span class="hljs-comment">// ]</span>
</span></span></foreignObject></svg></code></pre>
</section>
</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="24" data-paginate="true" data-marpit-pagination="24" data-marpit-pagination-total="65" style="--paginate:true;">
<h2>lookups</h2>
<pre><code class="language-php"><svg data-marp-fitting="svg" data-marp-fitting-code><foreignObject><span data-marp-fitting-svg-content><span data-marp-fitting-svg-content-wrap>$client = <span class="hljs-keyword">new</span> Client();
$res = $client-&gt;lookupIFSC(<span class="hljs-string">'KKBK0000261'</span>);
<span class="hljs-keyword">echo</span> $res-&gt;bank; <span class="hljs-comment">// 'KOTAK MAHINDRA BANK LIMITED'</span>
<span class="hljs-keyword">echo</span> $res-&gt;branch; <span class="hljs-comment">// 'GURGAON'</span>
<span class="hljs-keyword">echo</span> $res-&gt;address; <span class="hljs-comment">// 'JMD REGENT SQUARE,MEHRAULI GURGAON ROAD,OPPOSITE BRISTOL HOTEL,'</span>
<span class="hljs-keyword">echo</span> $res-&gt;contact; <span class="hljs-comment">// '4131000'</span>
<span class="hljs-keyword">echo</span> $res-&gt;city; <span class="hljs-comment">// 'GURGAON'</span>
<span class="hljs-keyword">echo</span> $res-&gt;district; <span class="hljs-comment">// 'GURGAON'</span>
<span class="hljs-keyword">echo</span> $res-&gt;state; <span class="hljs-comment">// 'HARYANA'</span>
<span class="hljs-keyword">echo</span> $res-&gt;getBankCode(); <span class="hljs-comment">// KKBK</span>
<span class="hljs-keyword">echo</span> $res-&gt;getBankName(); <span class="hljs-comment">// 'Kotak Mahindra Bank'</span>
</span></span></foreignObject></svg></code></pre>
</section>
</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="25" data-paginate="true" data-marpit-pagination="25" data-marpit-pagination-total="65" style="--paginate:true;">
<h1>Node.js</h1>
<pre><code class="language-js"><svg data-marp-fitting="svg" data-marp-fitting-code><foreignObject><span data-marp-fitting-svg-content><span data-marp-fitting-svg-content-wrap>ifsc.validate(<span class="hljs-string">'BOTM0XEEMRA'</span>); <span class="hljs-comment">// returns false</span>
<span class="hljs-comment">// Look ma, promises!</span>
ifsc.fetchDetails(<span class="hljs-string">'KKBK0000261'</span>).then(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">res</span>) </span>{
<span class="hljs-built_in">console</span>.log(res);
});
<span class="hljs-built_in">console</span>.log(ifsc.bank.PUNB); <span class="hljs-comment">// Prints 'PUNB'</span>
</span></span></foreignObject></svg></code></pre>
</section>
</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="26" data-paginate="true" data-marpit-pagination="26" data-marpit-pagination-total="65" style="--paginate:true;">
<h1>Ruby</h1>
<pre><code class="language-ruby"><svg data-marp-fitting="svg" data-marp-fitting-code><foreignObject><span data-marp-fitting-svg-content><span data-marp-fitting-svg-content-wrap>Razorpay::IFSC::IFSC.validate! <span class="hljs-string">'KKBK0000261'</span> <span class="hljs-comment"># =&gt; true</span>
<span class="hljs-comment"># Fetches details over API, constants as well</span>
Razorpay::IFSC::Bank.get_details Razorpay::IFSC::Bank::PUNB
{
<span class="hljs-symbol">code:</span> <span class="hljs-string">'PUNB'</span>,
<span class="hljs-symbol">type:</span> <span class="hljs-string">'PSB'</span>,
<span class="hljs-symbol">ifsc:</span> <span class="hljs-string">'PUNB0244200'</span>,
<span class="hljs-symbol">micr:</span> <span class="hljs-string">'110024001'</span>,
<span class="hljs-symbol">bank_code:</span> <span class="hljs-string">'024'</span>,
<span class="hljs-symbol">iin:</span> <span class="hljs-string">'508568'</span>,
<span class="hljs-symbol">apbs:</span> <span class="hljs-literal">true</span>,
<span class="hljs-symbol">ach_credit:</span> <span class="hljs-literal">true</span>,
<span class="hljs-symbol">ach_debit:</span> <span class="hljs-literal">true</span>,
<span class="hljs-symbol">nach_debit:</span> <span class="hljs-literal">true</span>
}
</span></span></foreignObject></svg></code></pre>
</section>
</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="27" data-paginate="true" data-marpit-pagination="27" data-marpit-pagination-total="65" style="--paginate:true;">
<h1>Support Matrix</h1>
<table>
<thead>
<tr>
<th>Language</th>
<th>Validation</th>
<th>API Client</th>
<th>Sublet Support (Custom)</th>
<th>Bank Constants</th>
</tr>
</thead>
<tbody>
<tr>
<td>PHP</td>
<td><img class="emoji" draggable="false" alt="✅" src="https://twemoji.maxcdn.com/2/svg/2705.svg" data-marp-twemoji=""/></td>
<td><img class="emoji" draggable="false" alt="✅" src="https://twemoji.maxcdn.com/2/svg/2705.svg" data-marp-twemoji=""/></td>
<td><img class="emoji" draggable="false" alt="✅" src="https://twemoji.maxcdn.com/2/svg/2705.svg" data-marp-twemoji=""/> (<img class="emoji" draggable="false" alt="✅" src="https://twemoji.maxcdn.com/2/svg/2705.svg" data-marp-twemoji=""/>)</td>
<td><img class="emoji" draggable="false" alt="✅" src="https://twemoji.maxcdn.com/2/svg/2705.svg" data-marp-twemoji=""/></td>
</tr>
<tr>
<td>Ruby</td>
<td><img class="emoji" draggable="false" alt="✅" src="https://twemoji.maxcdn.com/2/svg/2705.svg" data-marp-twemoji=""/></td>
<td><img class="emoji" draggable="false" alt="✅" src="https://twemoji.maxcdn.com/2/svg/2705.svg" data-marp-twemoji=""/></td>
<td><img class="emoji" draggable="false" alt="✅" src="https://twemoji.maxcdn.com/2/svg/2705.svg" data-marp-twemoji=""/> (<img class="emoji" draggable="false" alt="✅" src="https://twemoji.maxcdn.com/2/svg/2705.svg" data-marp-twemoji=""/>)</td>
<td><img class="emoji" draggable="false" alt="✅" src="https://twemoji.maxcdn.com/2/svg/2705.svg" data-marp-twemoji=""/></td>
</tr>
<tr>
<td>Elixir</td>
<td><img class="emoji" draggable="false" alt="✅" src="https://twemoji.maxcdn.com/2/svg/2705.svg" data-marp-twemoji=""/></td>
<td><img class="emoji" draggable="false" alt="✅" src="https://twemoji.maxcdn.com/2/svg/2705.svg" data-marp-twemoji=""/></td>
<td><img class="emoji" draggable="false" alt="✅" src="https://twemoji.maxcdn.com/2/svg/2705.svg" data-marp-twemoji=""/> (<img class="emoji" draggable="false" alt="❎" src="https://twemoji.maxcdn.com/2/svg/274e.svg" data-marp-twemoji=""/>)</td>
<td><img class="emoji" draggable="false" alt="❎" src="https://twemoji.maxcdn.com/2/svg/274e.svg" data-marp-twemoji=""/></td>
</tr>
<tr>
<td>Node.js</td>
<td><img class="emoji" draggable="false" alt="✅" src="https://twemoji.maxcdn.com/2/svg/2705.svg" data-marp-twemoji=""/></td>
<td><img class="emoji" draggable="false" alt="✅" src="https://twemoji.maxcdn.com/2/svg/2705.svg" data-marp-twemoji=""/></td>
<td><img class="emoji" draggable="false" alt="❎" src="https://twemoji.maxcdn.com/2/svg/274e.svg" data-marp-twemoji=""/> (<img class="emoji" draggable="false" alt="❎" src="https://twemoji.maxcdn.com/2/svg/274e.svg" data-marp-twemoji=""/>)</td>
<td><img class="emoji" draggable="false" alt="✅" src="https://twemoji.maxcdn.com/2/svg/2705.svg" data-marp-twemoji=""/></td>
</tr>
</tbody>
</table>
</section>
</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="28" data-paginate="true" data-marpit-pagination="28" data-marpit-pagination-total="65" style="--paginate:true;">
<h1>Growth Chart</h1>
<p><img src="chart.png" alt="" /></p>
</section>
</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section data-paginate="true" data-marpit-pagination="29" data-marpit-pagination-total="65" style="--paginate:true;" data-marpit-advanced-background="background"><div data-marpit-advanced-background-container="true" data-marpit-advanced-background-direction="horizontal"><figure style="background-image:url(&quot;https://fakeimg.pl/1920x800/c56cf0/fff/?text=planned+learnings&quot;);"></figure></div></section></foreignObject><foreignObject width="1280" height="720"><section id="29" data-paginate="true" data-marpit-pagination="29" data-marpit-pagination-total="65" style="--paginate:true;" data-marpit-advanced-background="content"></section>
</foreignObject><foreignObject width="1280" height="720" data-marpit-advanced-background="pseudo"><section style="" data-marpit-advanced-background="pseudo" data-marpit-pagination="29" data-marpit-pagination-total="65"></section></foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="30" data-paginate="true" data-marpit-pagination="30" data-marpit-pagination-total="65" style="--paginate:true;">
<h1>planned learnings</h1>
<ul>
<li>polyglot-single-repo-packages</li>
<li>open-data-superfast-public-APIs</li>
<li>scapegoat-application for random tests</li>
</ul>
</section>
</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="31" data-paginate="true" data-marpit-pagination="31" data-marpit-pagination-total="65" style="--paginate:true;">
<pre><code><svg data-marp-fitting="svg" data-marp-fitting-code><foreignObject><span data-marp-fitting-svg-content><span data-marp-fitting-svg-content-wrap>src/banknames.json
src/ruby
src/banks.json
src/patches
src/custom-sublets.json
src/elixir
src/node
src/IFSC.json
src/sublet.json
src/php
</span></span></foreignObject></svg></code></pre>
</section>
</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section data-paginate="true" data-marpit-pagination="32" data-marpit-pagination-total="65" style="--paginate:true;" data-marpit-advanced-background="background"><div data-marpit-advanced-background-container="true" data-marpit-advanced-background-direction="horizontal"><figure style="background-image:url(&quot;https://fakeimg.pl/1920x800/c56cf0/fff/?text=unplanned+learnings&quot;);"></figure></div></section></foreignObject><foreignObject width="1280" height="720"><section id="32" data-paginate="true" data-marpit-pagination="32" data-marpit-pagination-total="65" style="--paginate:true;" data-marpit-advanced-background="content"></section>
</foreignObject><foreignObject width="1280" height="720" data-marpit-advanced-background="pseudo"><section style="" data-marpit-advanced-background="pseudo" data-marpit-pagination="32" data-marpit-pagination-total="65"></section></foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="33" data-paginate="true" data-marpit-pagination="33" data-marpit-pagination-total="65" style="--paginate:true;">
<h1>1. There are too many banks in India</h1>
<ul>
<li><code>banknames.json</code> holds 1400+ named banks</li>
<li>Adding sublets, it adds up to atleast 2500+</li>
<li>Not all banks are recognized by RBI (with a 4 letter code)</li>
</ul>
</section>
</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="34" data-paginate="true" data-marpit-pagination="34" data-marpit-pagination-total="65" style="--paginate:true;">
<h1>2. There are 11 kinds of banks in India:</h1>
<ul>
<li>DCCB (District Co-operative Central Bank)</li>
<li>Foreign Bank</li>
<li>LAB (Local Area Bank)</li>
<li>O-UCB (Urban Co-operative Bank)</li>
<li>PB (Payment Bank)</li>
<li>Private (Private Sector Banks)</li>
<li>PSB (Public Sector Bank)</li>
<li>RRB (Regional Rural Bank)</li>
<li>S-UCB (?? Urban Co-operative Banks)</li>
<li>SCB (State Co-operative Bank)</li>
<li>SFB (Small Finance Bank)</li>
</ul>
</section>
</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="35" data-paginate="true" data-marpit-pagination="35" data-marpit-pagination-total="65" style="--paginate:true;">
<h1>3. RBI has no idea what its doing.</h1>
<pre><code><svg data-marp-fitting="svg" data-marp-fitting-code><foreignObject><span data-marp-fitting-svg-content><span data-marp-fitting-svg-content-wrap><span class="hljs-string">"IPOS"</span>: <span class="hljs-string">"India Post Payments Bank"</span>,
<span class="hljs-string">"IPPB"</span>: <span class="hljs-string">"India Post Payments Bank"</span>,
</span></span></foreignObject></svg></code></pre>
<h2><code>IPOS0000001</code></h2>
</section>
</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="36" data-paginate="true" data-marpit-pagination="36" data-marpit-pagination-total="65" style="--paginate:true;">
<h1>3.1 AJAR/AJUX</h1>
<pre><code><svg data-marp-fitting="svg" data-marp-fitting-code><foreignObject><span data-marp-fitting-svg-content><span data-marp-fitting-svg-content-wrap><span class="hljs-string">"AJAR"</span>: <span class="hljs-string">"Ajara Urban Co-operative Bank"</span>,
<span class="hljs-string">"AJUX"</span>: <span class="hljs-string">"Ajara Urban Co-operative Bank"</span>,
</span></span></foreignObject></svg></code></pre>
</section>
</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="37" data-paginate="true" data-marpit-pagination="37" data-marpit-pagination-total="65" style="--paginate:true;">
<h2>3.2 CXBX (Chartered Sahakari Bank Niyamitha)</h2>
<p><code>CSBX0CSB001</code> (Supports only IMPS, not listed by RBI)</p>
</section>
</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="38" data-paginate="true" data-marpit-pagination="38" data-marpit-pagination-total="65" style="--paginate:true;">
<h2>3.3 KOEX (KEB Hana Bank)</h2>
<pre><code><svg data-marp-fitting="svg" data-marp-fitting-code><foreignObject><span data-marp-fitting-svg-content><span data-marp-fitting-svg-content-wrap><span class="hljs-string">KOEX0000001:</span> RTGS<span class="hljs-regexp">/NEFT/</span>IMPS
<span class="hljs-string">KOEX0000002:</span> RTGS<span class="hljs-regexp">/NEFT/</span>IMPS
<span class="hljs-string">KOEX00000SC:</span> RTGS/IMPS
</span></span></foreignObject></svg></code></pre>
</section>
</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="39" data-paginate="true" data-marpit-pagination="39" data-marpit-pagination-total="65" style="--paginate:true;">
<h1>4. The NPCI doesn't come under RTI</h1>
<blockquote>
<p>The contention arises from the fact that while it is incorporated as a non-profit organisation, 57 percent of its shares are held by public sector banks.</p>
</blockquote>
<blockquote>
<p>“In a reply to an RTI, we found that AP Hota, the chief general manager of the RBI, was deputed by the Bank for two years to the management. Moreover, the RTI also revealed that RBI had provided office space as well as an inventory list of items to NPCI.”</p>
</blockquote>
<h2>Judgement:</h2>
<blockquote>
<p>Commission is also of the view that it may be open to the complainantto seek information through public authority for NPCI i.e. RBI or Ministry of Financeas the case may be. That being so, the complaint of the complainant is unfounded and the same is rejected. <a href="https://bit.ly/39dsFK6">https://bit.ly/39dsFK6</a></p>
</blockquote>
</section>
</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="40" data-paginate="true" data-marpit-pagination="40" data-marpit-pagination-total="65" style="--paginate:true;">
<h1>5. Companies still use MICR</h1>
<pre><code><svg data-marp-fitting="svg" data-marp-fitting-code><foreignObject><span data-marp-fitting-svg-content><span data-marp-fitting-svg-content-wrap><span class="hljs-number">000</span> <span class="hljs-number">000</span> <span class="hljs-number">000</span>
City Bank Branch
</span></span></foreignObject></svg></code></pre>
</section>
</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="41" data-paginate="true" data-marpit-pagination="41" data-marpit-pagination-total="65" style="--paginate:true;">
<h1>6. IBAN</h1>
<h2>International Bank Account Number</h2>
<blockquote>
<p>the Committee felt that longest IBAN is most suitable for the country. Longest IBAN envisages 26 digits IBAN for the banks in India with 18 digit account number, 4 digit bank code, 2 digit country code and 2 check digits. Under this system, banks can continue to use the existing account numbers, and where necessary the number will be padded with zeros to make the length of 18 digits as required.</p>
</blockquote>
<p><code>IN</code> + Check Digit + Bank Code + Account Number</p>
<ul>
<li>Bank Code: <code>[:alpha:]{4}</code></li>
<li>Check Digit: <code>[:digit:]{2}</code></li>
<li>Account Number: <code>[:alphanum:]{18}</code></li>
</ul>
<p>Source: <a href="https://www.iban.in/structure.html">https://www.iban.in/structure.html</a></p>
</section>
</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="42" data-paginate="true" data-marpit-pagination="42" data-marpit-pagination-total="65" style="--paginate:true;">
<h1>7. Bank Mergers are fun!</h1>
<blockquote>
<p>After merger, for all outward IMPS transactions of associate banks the IFS Code will changeand will be intimated to customer. However for all the inward IMPS transaction bank willsupport old IFSC number till 1 Month from the date of merger.</p>
<ul>
<li><a href="https://bank.sbi/webfiles/uploads/files/mergerofassociatebanks/IMPS%20Merger%20FAQ.pdf">SBI</a></li>
</ul>
</blockquote>
</section>
</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="43" data-paginate="true" data-marpit-pagination="43" data-marpit-pagination-total="65" style="--paginate:true;">
<h1>8. Naming banks is hard</h1>
<ul>
<li>20 different ways to write &quot;Co-operative&quot;</li>
<li>Zhilla, Zila, Jila, Jhila, District</li>
<li>Sahkari, Sahakari, Sah.,</li>
</ul>
</section>
</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="44" data-paginate="true" data-marpit-pagination="44" data-marpit-pagination-total="65" style="--paginate:true;">
<h1>9. IFSC Issuance Process</h1>
<ul>
<li>RBI issues 4 letter Bank Codes.</li>
<li>They end in &quot;X&quot; for banks not connected to RBI payment/settlement systems</li>
<li>Banks inform RBI of IFSCs for each branch via <a href="http://www.idrbt.ac.in/sfms.html">SFMS</a></li>
<li>Banks inform NPCI separately of IFSCs for each branch via NFS (?)</li>
</ul>
</section>
</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="45" data-paginate="true" data-marpit-pagination="45" data-marpit-pagination-total="65" style="--paginate:true;">
<h1>10. So many codes</h1>
<ul>
<li>IFSC code for IMPS</li>
<li>IFSC code for NEFT/RTGS</li>
<li>MICR code for cheques</li>
<li>SWIFT/SWIFT-BIC/BIC code for International inbound transfers</li>
<li>IBAN (International Bank Account Number)</li>
<li>NBIN (National Bank Identification) `[:digit:]{4}``</li>
<li>MMID <code>[:digit:]{7}</code> (NBIN+MAS (Mobile Account Selector, <code>[:digit:]{3}</code>))</li>
</ul>
</section>
</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="46" data-paginate="true" data-marpit-pagination="46" data-marpit-pagination-total="65" style="--paginate:true;">
<h1>11. I have no idea what I'm doing</h1>
<ul>
<li>NBIN format</li>
<li>Compression/Bloom Filter attempts</li>
</ul>
</section>
</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="47" data-paginate="true" data-marpit-pagination="47" data-marpit-pagination-total="65" style="--paginate:true;">
<h1>12. NPCI has no idea what it's doing</h1>
<p><code>@jio,@ezeepay,@lime,@purz,@s2b,@srcb,@upi</code></p>
<p>UPI handles with unknown issuing bank.</p>
<p>What happens to MDR?</p>
</section>
</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="48" data-paginate="true" data-marpit-pagination="48" data-marpit-pagination-total="65" style="--paginate:true;">
<h1>13. RBI doesn't care about data sanity</h1>
<h2>13.1 Encoding Issues</h2>
<p><code>&quot;CHENNAI - CENOTAPH ROAD &quot;</code><br />
<code>&quot;1, CENOTAPH ROAD, CHENNAI. &quot;</code></p>
</section>
</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="49" data-paginate="true" data-marpit-pagination="49" data-marpit-pagination-total="65" style="--paginate:true;">
<h2>13.2 RBI Excel Sheets are broken</h2>
<pre><code><svg data-marp-fitting="svg" data-marp-fitting-code><foreignObject><span data-marp-fitting-svg-content><span data-marp-fitting-svg-content-wrap>[WARN] IFSC <span class="hljs-meta">code</span> longer than <span class="hljs-number">11</span> characters: IOBA0003378 RO-TIRUPATHI, using IOBA0003378
[WARN] IFSC <span class="hljs-meta">code</span> longer than <span class="hljs-number">11</span> characters: <span class="hljs-keyword">BANK </span>OF <span class="hljs-keyword">BARODA, </span>using <span class="hljs-keyword">BANKOFBAROD
</span>[WARN] Second <span class="hljs-meta">Entry</span> found for HDFC0000917, discarding
[WARN] Second <span class="hljs-meta">Entry</span> found for FDRL0001808, discarding
[WARN] Second <span class="hljs-meta">Entry</span> found for ICIC0000248, discarding
[WARN] Second <span class="hljs-meta">Entry</span> found for ICIC0000557, discarding
[WARN] Second <span class="hljs-meta">Entry</span> found for ICIC0006252, discarding
[WARN] Second <span class="hljs-meta">Entry</span> found for CNRB0006822, discarding
[WARN] Second <span class="hljs-meta">Entry</span> found for DBSS0IN0901, discarding
</span></span></foreignObject></svg></code></pre>
</section>
</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="50" data-paginate="true" data-marpit-pagination="50" data-marpit-pagination-total="65" style="--paginate:true;">
<h1>13.3 RBI Excel Sheets are very broken</h1>
<pre><code><svg data-marp-fitting="svg" data-marp-fitting-code><foreignObject><span data-marp-fitting-svg-content><span data-marp-fitting-svg-content-wrap>[<span class="hljs-meta">WARN</span>] Second Entry found <span class="hljs-keyword">for</span> ICIC0002261, discarding
[<span class="hljs-meta">WARN</span>] Second Entry found <span class="hljs-keyword">for</span> IDFB0040138, discarding
[<span class="hljs-meta">WARN</span>] Second Entry found <span class="hljs-keyword">for</span> CBIN0284329, discarding
[<span class="hljs-meta">WARN</span>] Second Entry found <span class="hljs-keyword">for</span> UTIB0002805, discarding
[<span class="hljs-meta">WARN</span>] Second Entry found <span class="hljs-keyword">for</span> DCBL0000126, discarding
[<span class="hljs-meta">WARN</span>] Second Entry found <span class="hljs-keyword">for</span> ICIC0000276, discarding
[<span class="hljs-meta">WARN</span>] Second Entry found <span class="hljs-keyword">for</span> ICIC0006033, discarding
[<span class="hljs-meta">WARN</span>] IFSC code longer than <span class="hljs-number">11</span> characters: IOBA0003379 RO-NAGERCOIL, <span class="hljs-keyword">using</span> IOBA0003379
[<span class="hljs-meta">WARN</span>] IFSC code longer than <span class="hljs-number">11</span> characters: IOBA0003392
[<span class="hljs-meta">INFO</span>] Removed BANKOFBAROD <span class="hljs-keyword">from</span> the list
</span></span></foreignObject></svg></code></pre>
</section>
</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section data-paginate="true" data-marpit-pagination="51" data-marpit-pagination-total="65" style="--paginate:true;" data-marpit-advanced-background="background"><div data-marpit-advanced-background-container="true" data-marpit-advanced-background-direction="horizontal"><figure style="background-image:url(&quot;rbi-issues.jpg&quot;);background-size:80%;"></figure></div></section></foreignObject><foreignObject width="1280" height="720"><section id="51" data-paginate="true" data-marpit-pagination="51" data-marpit-pagination-total="65" style="--paginate:true;" data-marpit-advanced-background="content"></section>
</foreignObject><foreignObject width="1280" height="720" data-marpit-advanced-background="pseudo"><section style="" data-marpit-advanced-background="pseudo" data-marpit-pagination="51" data-marpit-pagination-total="65"></section></foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section data-paginate="true" data-marpit-pagination="52" data-marpit-pagination-total="65" style="--paginate:true;" data-marpit-advanced-background="background"><div data-marpit-advanced-background-container="true" data-marpit-advanced-background-direction="horizontal"><figure style="background-image:url(&quot;rbi-response.png&quot;);background-size:70%;"></figure></div></section></foreignObject><foreignObject width="1280" height="720"><section id="52" data-paginate="true" data-marpit-pagination="52" data-marpit-pagination-total="65" style="--paginate:true;" data-marpit-advanced-background="content"></section>
</foreignObject><foreignObject width="1280" height="720" data-marpit-advanced-background="pseudo"><section style="" data-marpit-advanced-background="pseudo" data-marpit-pagination="52" data-marpit-pagination-total="65"></section></foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section data-paginate="true" data-marpit-pagination="53" data-marpit-pagination-total="65" style="--paginate:true;" data-marpit-advanced-background="background"><div data-marpit-advanced-background-container="true" data-marpit-advanced-background-direction="horizontal"><figure style="background-image:url(&quot;rbi-email-1.png&quot;);background-size:80%;"></figure></div></section></foreignObject><foreignObject width="1280" height="720"><section id="53" data-paginate="true" data-marpit-pagination="53" data-marpit-pagination-total="65" style="--paginate:true;" data-marpit-advanced-background="content"></section>
</foreignObject><foreignObject width="1280" height="720" data-marpit-advanced-background="pseudo"><section style="" data-marpit-advanced-background="pseudo" data-marpit-pagination="53" data-marpit-pagination-total="65"></section></foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section data-paginate="true" data-marpit-pagination="54" data-marpit-pagination-total="65" style="--paginate:true;" data-marpit-advanced-background="background"><div data-marpit-advanced-background-container="true" data-marpit-advanced-background-direction="horizontal"><figure style="background-image:url(&quot;rbi-email-2.png&quot;);background-size:80%;"></figure></div></section></foreignObject><foreignObject width="1280" height="720"><section id="54" data-paginate="true" data-marpit-pagination="54" data-marpit-pagination-total="65" style="--paginate:true;" data-marpit-advanced-background="content"></section>
</foreignObject><foreignObject width="1280" height="720" data-marpit-advanced-background="pseudo"><section style="" data-marpit-advanced-background="pseudo" data-marpit-pagination="54" data-marpit-pagination-total="65"></section></foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="55" data-paginate="true" data-marpit-pagination="55" data-marpit-pagination-total="65" style="--paginate:true;">
<h1>14. <a href="https://github.com/razorpay/ifsc/issues/154">NEFT blocks</a></h1>
</section>
</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section data-paginate="true" data-marpit-pagination="56" data-marpit-pagination-total="65" style="--paginate:true;" data-marpit-advanced-background="background"><div data-marpit-advanced-background-container="true" data-marpit-advanced-background-direction="horizontal"><figure style="background-image:url(&quot;https://fakeimg.pl/1920x800/ff4d4d/fff/?text=the+tech&quot;);"></figure></div></section></foreignObject><foreignObject width="1280" height="720"><section id="56" data-paginate="true" data-marpit-pagination="56" data-marpit-pagination-total="65" style="--paginate:true;" data-marpit-advanced-background="content">
<h1></h1>
</section>
</foreignObject><foreignObject width="1280" height="720" data-marpit-advanced-background="pseudo"><section style="" data-marpit-advanced-background="pseudo" data-marpit-pagination="56" data-marpit-pagination-total="65"></section></foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="57" data-paginate="true" data-marpit-pagination="57" data-marpit-pagination-total="65" style="--paginate:true;">
<h1>tech</h1>
<ol>
<li>scraper, written in ruby/bash (~400 lines)</li>
<li>release notes generator script, written in PHP</li>
<li>A patch manager to &quot;fix&quot; issues</li>
</ol>
</section>
</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="58" data-paginate="true" data-marpit-pagination="58" data-marpit-pagination-total="65" style="--paginate:true;">
<pre><code class="language-yaml"><svg data-marp-fitting="svg" data-marp-fitting-code><foreignObject><span data-marp-fitting-svg-content><span data-marp-fitting-svg-content-wrap><span class="hljs-meta">---</span>
<span class="hljs-comment"># https://github.com/razorpay/ifsc/issues/154</span>
<span class="hljs-attr">action:</span> <span class="hljs-string">patch</span>
<span class="hljs-attr">patch:</span>
<span class="hljs-attr">NEFT:</span> <span class="hljs-literal">false</span>
<span class="hljs-attr">ifsc:</span>
<span class="hljs-comment"># - KRTH0INBB00</span>
<span class="hljs-bullet">-</span> <span class="hljs-string">BCEY0000001</span>
<span class="hljs-bullet">-</span> <span class="hljs-string">BCEY0CHEN01</span>
<span class="hljs-bullet">-</span> <span class="hljs-string">KGRB0000001</span>
<span class="hljs-bullet">-</span> <span class="hljs-string">KGRB0000002</span>
<span class="hljs-bullet">-</span> <span class="hljs-string">KGRB0000004</span>
</span></span></foreignObject></svg></code></pre>
</section>
</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="59" data-paginate="true" data-marpit-pagination="59" data-marpit-pagination-total="65" style="--paginate:true;">
<pre><code class="language-yaml"><svg data-marp-fitting="svg" data-marp-fitting-code><foreignObject><span data-marp-fitting-svg-content><span data-marp-fitting-svg-content-wrap><span class="hljs-meta">---</span>
<span class="hljs-comment"># https://github.com/razorpay/ifsc/issues/126</span>
<span class="hljs-comment"># Source: https://www.npci.org.in/upi-live-members</span>
<span class="hljs-comment"># Last Updated: Jan 2020 (Count = 143)</span>
<span class="hljs-attr">action:</span> <span class="hljs-string">patch</span>
<span class="hljs-attr">patch:</span>
<span class="hljs-string">:upi:</span> <span class="hljs-literal">true</span>
<span class="hljs-attr">banks:</span>
<span class="hljs-bullet">-</span> <span class="hljs-string">ABHY</span>
<span class="hljs-bullet">-</span> <span class="hljs-string">ACBX</span>
<span class="hljs-bullet">-</span> <span class="hljs-string">ADBX</span>
<span class="hljs-bullet">-</span> <span class="hljs-string">AGVX</span>
<span class="hljs-bullet">-</span> <span class="hljs-string">AIRP</span>
<span class="hljs-bullet">-</span> <span class="hljs-string">ALLA</span>
</span></span></foreignObject></svg></code></pre>
</section>
</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="60" data-paginate="true" data-marpit-pagination="60" data-marpit-pagination-total="65" style="--paginate:true;">
<h1>Rigorous Tests</h1>
<h2>Ensure Coverage between datasets</h2>
<pre><code><svg data-marp-fitting="svg" data-marp-fitting-code><foreignObject><span data-marp-fitting-svg-content><span data-marp-fitting-svg-content-wrap><span class="hljs-attribute">testNames
testConstants
testCoverageAgainstBankNames
testConstantsAgainstNames
testSubletsAgainstConstants
testConstantsAgainstCompleteBanksList
testSubletCoverage
testValidateJsonFormat
testNpciListAgainstRbi
testPatches</span>
</span></span></foreignObject></svg></code></pre>
</section>
</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="61" data-paginate="true" data-marpit-pagination="61" data-marpit-pagination-total="65" style="--paginate:true;">
<h2>Ensure common tests between languages</h2>
<pre><code class="language-json"><svg data-marp-fitting="svg" data-marp-fitting-code><foreignObject><span data-marp-fitting-svg-content><span data-marp-fitting-svg-content-wrap> <span class="hljs-string">"testBasicValidator"</span>: {
<span class="hljs-attr">"KKBK0000261"</span>: <span class="hljs-literal">true</span>,
<span class="hljs-attr">"HDFC0002854"</span>: <span class="hljs-literal">true</span>,
},
<span class="hljs-string">"testValidateStringLookup"</span>: {
<span class="hljs-attr">"BOTM0NEEMRA"</span>: <span class="hljs-literal">true</span>,
<span class="hljs-attr">"BARB0ZOOTIN"</span>: <span class="hljs-literal">true</span>
},
<span class="hljs-string">"testValidateInvalidCode"</span>: {
<span class="hljs-attr">"BOTM0XEEMRA"</span>: <span class="hljs-literal">false</span>,
},
<span class="hljs-string">"testHPSC"</span>: {
<span class="hljs-attr">"HPSC0000406"</span>: <span class="hljs-literal">true</span>,
<span class="hljs-attr">"HPSC0000300"</span>: <span class="hljs-literal">false</span>
},
<span class="hljs-string">"testEdgeCases"</span>: {
<span class="hljs-attr">"SBMY0040704"</span>: <span class="hljs-literal">false</span>
},
<span class="hljs-string">"testSBIOldCodes"</span>: {
<span class="hljs-attr">"SBBJ0010004"</span>: <span class="hljs-literal">false</span>,
<span class="hljs-attr">"SBBJ0010006"</span>: <span class="hljs-literal">false</span>,
</span></span></foreignObject></svg></code></pre>
</section>
</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="62" data-paginate="true" data-marpit-pagination="62" data-marpit-pagination-total="65" style="--paginate:true;">
<h2>Ensure coverage across languages</h2>
<pre><code class="language-ruby"><svg data-marp-fitting="svg" data-marp-fitting-code><foreignObject><span data-marp-fitting-svg-content><span data-marp-fitting-svg-content-wrap>it <span class="hljs-string">'should match all constants defined in PHP'</span> <span class="hljs-keyword">do</span>
constants_file = File.readlines(<span class="hljs-string">'src/php/Bank.php'</span>)
bank_constants = constants_file
.select { <span class="hljs-params">|e|</span> e.match(<span class="hljs-regexp">/const/</span>) }
.map { <span class="hljs-params">|e|</span> e[<span class="hljs-regexp">/\s+const (\w{4})/</span>, <span class="hljs-number">1</span>] }
bank_constants.each <span class="hljs-keyword">do</span> <span class="hljs-params">|c|</span>
expect(described_class::const_get(c)).to eq c.to_sym
<span class="hljs-keyword">end</span>
<span class="hljs-keyword">end</span>
</span></span></foreignObject></svg></code></pre>
</section>
</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="63" data-paginate="true" data-marpit-pagination="63" data-marpit-pagination-total="65" style="--paginate:true;">
<h2>Ensure coverage across languages</h2>
<pre><code class="language-js"><svg data-marp-fitting="svg" data-marp-fitting-code><foreignObject><span data-marp-fitting-svg-content><span data-marp-fitting-svg-content-wrap><span class="hljs-comment">// Validates that all constants defined in PHP are also defined in Node</span>
<span class="hljs-keyword">let</span> file = fs
.readFileSync(<span class="hljs-string">'src/php/Bank.php'</span>)
.toString()
.split(<span class="hljs-string">'\n'</span>)
.filter(<span class="hljs-function"><span class="hljs-params">l</span> =&gt;</span> {
<span class="hljs-keyword">return</span> l.indexOf(<span class="hljs-string">'const'</span>) &gt; <span class="hljs-number">-1</span>;
})
.map(<span class="hljs-function"><span class="hljs-params">l</span> =&gt;</span> {
<span class="hljs-keyword">return</span> l.match(<span class="hljs-regexp">/\s+const (\w{4})/</span>)[<span class="hljs-number">1</span>];
})
.forEach(<span class="hljs-function"><span class="hljs-params">code</span> =&gt;</span> {
assert.equal(BANK[code], code);
assert.equal(IFSC.bank[code], code);
});
</span></span></foreignObject></svg></code></pre>
</section>
</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="64" data-paginate="true" data-marpit-pagination="64" data-marpit-pagination-total="65" style="--paginate:true;">
<h2>The API (<a href="https://github.com/razorpay/ifsc-api/">https://github.com/razorpay/ifsc-api/</a>)</h2>
<ol>
<li>Has all the data committed (huge repo, split-off)</li>
<li>Multi-stage docker build (150MB)</li>
<li>Uses Ruby/Sinatra/Redis for serving requests</li>
</ol>
</section>
</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="65" data-paginate="true" data-marpit-pagination="65" data-marpit-pagination-total="65" style="--paginate:true;"></section>
<script>!function(){"use strict";function t(t){Array.from(document.getElementsByTagName("svg"),e=>{if(e.hasAttribute("data-marpit-svg")){const{clientHeight:r,clientWidth:a}=e;e.style.transform||(e.style.transform="translateZ(0)");const o=t||e.currentScale||1,i=e.viewBox.baseVal.width/o,n=e.viewBox.baseVal.height/o,s=Math.min(r/n,a/i);Array.from(e.querySelectorAll(":scope > foreignObject"),t=>{const e=t.x.baseVal.value,o=t.y.baseVal.value;Array.from(t.querySelectorAll(":scope > section"),t=>{t.style.transformOrigin||(t.style.transformOrigin="0 0");const l=(a-s*i)/2-e,c=(r-s*n)/2-o;t.style.transform=`translate3d(${l}px,${c}px,0) scale(${s}) translate(${e}px,${o}px)`})})}})}const e=(t,e,r)=>{if(t.getAttribute(e)!==r)return t.setAttribute(e,r),!0};function r(a=!0){for(const e of"Apple Computer, Inc."===navigator.vendor?[t]:[])e();Array.from(document.querySelectorAll('svg[data-marp-fitting="svg"]'),t=>{const r=t.firstChild,a=r.firstChild,{scrollWidth:o,scrollHeight:i}=a;let n,s=1;if(t.hasAttribute("data-marp-fitting-code")&&(n=t.parentElement.parentElement),t.hasAttribute("data-marp-fitting-math")&&(n=t.parentElement),n){const t=getComputedStyle(n),e=Math.ceil(n.clientWidth-parseFloat(t.paddingLeft)-parseFloat(t.paddingRight));e&&(s=e)}const l=Math.max(o,s),c=Math.max(i,1),p=`0 0 ${l} ${c}`;e(r,"width",`${l}`),e(r,"height",`${c}`),e(t,"preserveAspectRatio",getComputedStyle(t).getPropertyValue("--preserve-aspect-ratio")||"xMinYMin meet"),e(t,"viewBox",p)&&t.classList.toggle("__reflow__")}),a&&window.requestAnimationFrame(()=>r(a))}!function(){if("undefined"==typeof window)throw new Error("Marp Core's browser script is valid only in browser context.");window.marpCoreBrowserScript?console.warn("Marp Core's browser script has already executed."):(Object.defineProperty(window,"marpCoreBrowserScript",{value:!0}),r())}()}();
</script></foreignObject></svg></div><script>!function(){"use strict";var e=function(e,t){var n,r=1===(e.parent||e).nodeType?e.parent||e:document.querySelector(e.parent||e),s=[].filter.call("string"==typeof e.slides?r.querySelectorAll(e.slides):e.slides||r.children,(function(e){return"SCRIPT"!==e.nodeName})),o={},a=function(e,t){return(t=t||{}).index=s.indexOf(e),t.slide=e,t},i=function(e,t){o[e]=(o[e]||[]).filter((function(e){return e!==t}))},l=function(e,t){return(o[e]||[]).reduce((function(e,n){return e&&!1!==n(t)}),!0)},c=function(e,t){s[e]&&(n&&l("deactivate",a(n,t)),n=s[e],l("activate",a(n,t)))},d=function(e,t){var r=s.indexOf(n)+e;l(e>0?"next":"prev",a(n,t))&&c(r,t)},u={off:i,on:function(e,t){return(o[e]||(o[e]=[])).push(t),i.bind(null,e,t)},fire:l,slide:function(e,t){if(!arguments.length)return s.indexOf(n);l("slide",a(s[e],t))&&c(e,t)},next:d.bind(null,1),prev:d.bind(null,-1),parent:r,slides:s,destroy:function(e){l("destroy",a(n,e)),o={}}};return(t||[]).forEach((function(e){e(u)})),n||c(0),u};function t(e){e.parent.classList.add("bespoke-marp-parent"),e.slides.map(e=>e.classList.add("bespoke-marp-slide")),e.on("activate",t=>{e.slides.map(e=>e.classList.remove("bespoke-marp-active")),t.slide.classList.add("bespoke-marp-active")})}function n(e=2e3){return t=>{let n;function r(){n&&clearTimeout(n),n=setTimeout(()=>{t.parent.classList.add("bespoke-marp-inactive")},e),t.parent.classList.remove("bespoke-marp-inactive")}document.addEventListener("mousedown",r),document.addEventListener("mousemove",r),document.addEventListener("touchend",r),setTimeout(r,0)}}const r=["AUDIO","BUTTON","INPUT","SELECT","TEXTAREA","VIDEO"];function s(e){e.parent.addEventListener("keydown",e=>{if(!e.target)return;const t=e.target;(r.includes(t.nodeName)||"true"===t.contentEditable)&&e.stopPropagation()})}function o(e){window.addEventListener("load",()=>{for(const t of e.slides){const e=t.querySelector("[data-marp-fitting]")?"":"hideable";t.setAttribute("data-bespoke-marp-load",e)}})}function a(e){let t=0,n=0;Object.defineProperty(e,"fragments",{enumerable:!0,value:e.slides.map(e=>[null,...e.querySelectorAll("[data-marpit-fragment]")])});const r=r=>void 0!==e.fragments[t][n+r],s=(r,s)=>{t=r,n=s,e.fragments.forEach((e,t)=>{e.forEach((e,n)=>{if(null==e)return;const o=t<r||t===r&&n<=s;e.setAttribute("data-bespoke-marp-fragment",o?"active":"inactive"),t===r&&n===s?e.setAttribute("data-bespoke-marp-current-fragment","current"):e.removeAttribute("data-bespoke-marp-current-fragment")})}),e.fragmentIndex=s;const o={slide:e.slides[r],index:r,fragments:e.fragments[r],fragmentIndex:s};e.fire("fragment",o)};e.on("next",()=>{if(r(1))return s(t,n+1),!1;const o=t+1;e.fragments[o]&&s(o,0)}),e.on("prev",()=>{if(r(-1))return s(t,n-1),!1;const o=t-1;e.fragments[o]&&s(o,e.fragments[o].length-1)}),e.on("slide",({index:t,fragment:n})=>{let r=0;if(void 0!==n){const s=e.fragments[t];if(s){const{length:e}=s;r=-1===n?e-1:Math.min(Math.max(n,0),e-1)}}s(t,r)}),s(0,0)}var i,l=function(e,t){return e(t={exports:{}},t.exports),t.exports}((function(e){
/*!
* screenfull
* v5.0.0 - 2019-09-09
* (c) Sindre Sorhus; MIT License
*/
!function(){var t="undefined"!=typeof window&&void 0!==window.document?window.document:{},n=e.exports,r=function(){for(var e,n=[["requestFullscreen","exitFullscreen","fullscreenElement","fullscreenEnabled","fullscreenchange","fullscreenerror"],["webkitRequestFullscreen","webkitExitFullscreen","webkitFullscreenElement","webkitFullscreenEnabled","webkitfullscreenchange","webkitfullscreenerror"],["webkitRequestFullScreen","webkitCancelFullScreen","webkitCurrentFullScreenElement","webkitCancelFullScreen","webkitfullscreenchange","webkitfullscreenerror"],["mozRequestFullScreen","mozCancelFullScreen","mozFullScreenElement","mozFullScreenEnabled","mozfullscreenchange","mozfullscreenerror"],["msRequestFullscreen","msExitFullscreen","msFullscreenElement","msFullscreenEnabled","MSFullscreenChange","MSFullscreenError"]],r=0,s=n.length,o={};r<s;r++)if((e=n[r])&&e[1]in t){for(r=0;r<e.length;r++)o[n[0][r]]=e[r];return o}return!1}(),s={change:r.fullscreenchange,error:r.fullscreenerror},o={request:function(e){return new Promise(function(n,s){var o=function(){this.off("change",o),n()}.bind(this);this.on("change",o),e=e||t.documentElement,Promise.resolve(e[r.requestFullscreen]()).catch(s)}.bind(this))},exit:function(){return new Promise(function(e,n){if(this.isFullscreen){var s=function(){this.off("change",s),e()}.bind(this);this.on("change",s),Promise.resolve(t[r.exitFullscreen]()).catch(n)}else e()}.bind(this))},toggle:function(e){return this.isFullscreen?this.exit():this.request(e)},onchange:function(e){this.on("change",e)},onerror:function(e){this.on("error",e)},on:function(e,n){var r=s[e];r&&t.addEventListener(r,n,!1)},off:function(e,n){var r=s[e];r&&t.removeEventListener(r,n,!1)},raw:r};r?(Object.defineProperties(o,{isFullscreen:{get:function(){return Boolean(t[r.fullscreenElement])}},element:{enumerable:!0,get:function(){return t[r.fullscreenElement]}},isEnabled:{enumerable:!0,get:function(){return Boolean(t[r.fullscreenEnabled])}}}),n?e.exports=o:window.screenfull=o):n?e.exports={isEnabled:!1}:window.screenfull={isEnabled:!1}}()}));l.isEnabled;function c(e){e.fullscreen=()=>{l.isEnabled&&l.toggle(document.body)},document.addEventListener("keydown",t=>{70!==t.which&&122!==t.which||t.altKey||t.ctrlKey||t.metaKey||!l.isEnabled||(e.fullscreen(),t.preventDefault())})}function d(e={}){const t=Object.assign({interval:200},e);return e=>{document.addEventListener("keydown",t=>{(32===t.which&&t.shiftKey||33===t.which||37===t.which||38===t.which)&&e.prev(),(32===t.which&&!t.shiftKey||34===t.which||39===t.which||40===t.which)&&e.next(),35===t.which&&e.slide(e.slides.length-1,{fragment:-1}),36===t.which&&e.slide(0)});let n,r,s=0;e.parent.addEventListener("wheel",o=>{let a=!1;const l=(e,t)=>{var n;e&&(a=a||function(e,t){return function(e,t){const n=t===i.X?"Width":"Height";return e[`client${n}`]<e[`scroll${n}`]}(e,t)&&function(e,t){const{overflow:n}=e,r=e[`overflow${t}`];return"auto"===n||"scroll"===n||"auto"===r||"scroll"===r}(getComputedStyle(e),t)}(e,t)),(null===(n=e)||void 0===n?void 0:n.parentElement)&&l(e.parentElement,t)};if(0!==o.deltaX&&l(o.target,i.X),0!==o.deltaY&&l(o.target,i.Y),a)return;o.preventDefault(),r&&clearTimeout(r),r=setTimeout(()=>{n=0},t.interval);const c=Date.now()-s<t.interval,d=Math.sqrt(Math.pow(o.deltaX,2)+Math.pow(o.deltaY,2)),u=d<=n;if(n=d,c||u)return;let f;(o.deltaX>0||o.deltaY>0)&&(f="next"),(o.deltaX<0||o.deltaY<0)&&(f="prev"),f&&(e[f](),s=Date.now())})}}function u(e=".bespoke-marp-osc"){const t=document.querySelector(e);if(!t)return()=>{};const n=(e,n)=>{t.querySelectorAll(`[data-bespoke-marp-osc=${JSON.stringify(e)}]`).forEach(n)};return l.isEnabled||n("fullscreen",e=>e.style.display="none"),e=>{t.addEventListener("click",t=>{if(t.target instanceof HTMLElement){const{bespokeMarpOsc:n}=t.target.dataset;switch(n&&t.target.blur(),n){case"next":e.next();break;case"prev":e.prev();break;case"fullscreen":"function"==typeof e.fullscreen&&l.isEnabled&&e.fullscreen();break;case"presenter":e.openPresenterView()}}}),e.parent.appendChild(t),e.on("activate",({index:t})=>{n("page",n=>n.textContent=`Page ${t+1} of ${e.slide
</script></body></html>