<span class="hljs-comment" style="color:#008000;font-weight:bold;">//</span>
<span class="hljs-comment" style="color:#008000;font-weight:bold;">// Example Delphi implementation for Damm checkdigit algorithm</span>
<span class="hljs-comment" style="color:#008000;font-weight:bold;">//</span>
<span class="hljs-comment" style="color:#008000;font-weight:bold;">// https://en.wikipedia.org/wiki/Damm_algorithm</span>
<span class="hljs-comment" style="color:#008000;font-weight:bold;">// https://ja.wikipedia.org/wiki/Damm%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0</span>
<span class="hljs-keyword" style="color:#000080;font-weight:bold;">unit</span> Damm;
<span class="hljs-keyword" style="color:#000080;font-weight:bold;">interface</span>
<span class="hljs-keyword" style="color:#000080;font-weight:bold;">uses</span>
System.SysUtils;
<span class="hljs-function"><span class="hljs-keyword" style="color:#000080;font-weight:bold;">function</span> <span class="hljs-title" style="color:#0000ff;font-weight:bold;">encode</span><span class="hljs-params">(Number: <span class="hljs-keyword" style="color:#000080;font-weight:bold;">String</span> )</span>:</span> Integer;
<span class="hljs-function"><span class="hljs-keyword" style="color:#000080;font-weight:bold;">function</span> <span class="hljs-title" style="color:#0000ff;font-weight:bold;">check</span><span class="hljs-params">(Number: <span class="hljs-keyword" style="color:#000080;font-weight:bold;">String</span> )</span>:</span> Boolean;
<span class="hljs-keyword" style="color:#000080;font-weight:bold;">implementation</span>
<span class="hljs-function"><span class="hljs-keyword" style="color:#000080;font-weight:bold;">function</span> <span class="hljs-title" style="color:#0000ff;font-weight:bold;">encode</span><span class="hljs-params">(Number: <span class="hljs-keyword" style="color:#000080;font-weight:bold;">String</span>)</span>:</span> Integer;
<span class="hljs-comment" style="color:#008000;font-weight:bold;">// input: numeric string.</span>
<span class="hljs-comment" style="color:#008000;font-weight:bold;">// return: check digit by damm</span>
<span class="hljs-keyword" style="color:#000080;font-weight:bold;">const</span>
matrix: <span class="hljs-keyword" style="color:#000080;font-weight:bold;">array</span>[<span class="hljs-number">0</span>..<span class="hljs-number">9</span>, <span class="hljs-number">0</span>..<span class="hljs-number">9</span>] <span class="hljs-keyword" style="color:#000080;font-weight:bold;">of</span> integer = (
(<span class="hljs-number">0</span>, <span class="hljs-number">3</span>, <span class="hljs-number">1</span>, <span class="hljs-number">7</span>, <span class="hljs-number">5</span>, <span class="hljs-number">9</span>, <span class="hljs-number">8</span>, <span class="hljs-number">6</span>, <span class="hljs-number">4</span>, <span class="hljs-number">2</span>),
(<span class="hljs-number">7</span>, <span class="hljs-number">0</span>, <span class="hljs-number">9</span>, <span class="hljs-number">2</span>, <span class="hljs-number">1</span>, <span class="hljs-number">5</span>, <span class="hljs-number">4</span>, <span class="hljs-number">8</span>, <span class="hljs-number">6</span>, <span class="hljs-number">3</span>),
(<span class="hljs-number">4</span>, <span class="hljs-number">2</span>, <span class="hljs-number">0</span>, <span class="hljs-number">6</span>, <span class="hljs-number">8</span>, <span class="hljs-number">7</span>, <span class="hljs-number">1</span>, <span class="hljs-number">3</span>, <span class="hljs-number">5</span>, <span class="hljs-number">9</span>),
(<span class="hljs-number">1</span>, <span class="hljs-number">7</span>, <span class="hljs-number">5</span>, <span class="hljs-number">0</span>, <span class="hljs-number">9</span>, <span class="hljs-number">8</span>, <span class="hljs-number">3</span>, <span class="hljs-number">4</span>, <span class="hljs-number">2</span>, <span class="hljs-number">6</span>),
(<span class="hljs-number">6</span>, <span class="hljs-number">1</span>, <span class="hljs-number">2</span>, <span class="hljs-number">3</span>, <span class="hljs-number">0</span>, <span class="hljs-number">4</span>, <span class="hljs-number">5</span>, <span class="hljs-number">9</span>, <span class="hljs-number">7</span>, <span class="hljs-number">8</span>),
(<span class="hljs-number">3</span>, <span class="hljs-number">6</span>, <span class="hljs-number">7</span>, <span class="hljs-number">4</span>, <span class="hljs-number">2</span>, <span class="hljs-number">0</span>, <span class="hljs-number">9</span>, <span class="hljs-number">5</span>, <span class="hljs-number">8</span>, <span class="hljs-number">1</span>),
(<span class="hljs-number">5</span>, <span class="hljs-number">8</span>, <span class="hljs-number">6</span>, <span class="hljs-number">9</span>, <span class="hljs-number">7</span>, <span class="hljs-number">2</span>, <span class="hljs-number">0</span>, <span class="hljs-number">1</span>, <span class="hljs-number">3</span>, <span class="hljs-number">4</span>),
(<span class="hljs-number">8</span>, <span class="hljs-number">9</span>, <span class="hljs-number">4</span>, <span class="hljs-number">5</span>, <span class="hljs-number">3</span>, <span class="hljs-number">6</span>, <span class="hljs-number">2</span>, <span class="hljs-number">0</span>, <span class="hljs-number">1</span>, <span class="hljs-number">7</span>),
(<span class="hljs-number">9</span>, <span class="hljs-number">4</span>, <span class="hljs-number">3</span>, <span class="hljs-number">8</span>, <span class="hljs-number">6</span>, <span class="hljs-number">1</span>, <span class="hljs-number">7</span>, <span class="hljs-number">2</span>, <span class="hljs-number">0</span>, <span class="hljs-number">5</span>),
(<span class="hljs-number">2</span>, <span class="hljs-number">5</span>, <span class="hljs-number">8</span>, <span class="hljs-number">1</span>, <span class="hljs-number">4</span>, <span class="hljs-number">3</span>, <span class="hljs-number">6</span>, <span class="hljs-number">7</span>, <span class="hljs-number">9</span>, <span class="hljs-number">0</span>)
);
<span class="hljs-keyword" style="color:#000080;font-weight:bold;">var</span>
interim: Integer;
<span class="hljs-keyword" style="color:#000080;font-weight:bold;">index</span>: Integer;
<span class="hljs-keyword" style="color:#000080;font-weight:bold;">begin</span>
interim := <span class="hljs-number">0</span>;
<span class="hljs-keyword" style="color:#000080;font-weight:bold;">for</span> <span class="hljs-keyword" style="color:#000080;font-weight:bold;">index</span> := <span class="hljs-number">1</span> <span class="hljs-keyword" style="color:#000080;font-weight:bold;">to</span> length(Number) <span class="hljs-keyword" style="color:#000080;font-weight:bold;">do</span>
interim := matrix[ interim, StrToInt(Number[<span class="hljs-keyword" style="color: #000080; font-weight: bold;">index</span>]) ];
Result := interim;
<span class="hljs-keyword" style="color:#000080;font-weight:bold;">end</span>;
<span class="hljs-function"><span class="hljs-keyword" style="color:#000080;font-weight:bold;">function</span> <span class="hljs-title" style="color:#0000ff;font-weight:bold;">check</span><span class="hljs-params">(Number: <span class="hljs-keyword" style="color:#000080;font-weight:bold;">String</span>)</span>:</span> Boolean;
<span class="hljs-comment" style="color:#008000;font-weight:bold;">// input: numeric string with damm checkdigit.</span>
<span class="hljs-comment" style="color:#008000;font-weight:bold;">// return: true if input value is valid number with check digit.</span>
<span class="hljs-keyword" style="color:#000080;font-weight:bold;">begin</span>
<span class="hljs-keyword" style="color:#000080;font-weight:bold;">if</span> ( encode( Number ) = <span class="hljs-number">0</span> ) <span class="hljs-keyword" style="color:#000080;font-weight:bold;">then</span>
Result := True
<span class="hljs-keyword" style="color:#000080;font-weight:bold;">else</span>
Result := False;
<span class="hljs-keyword" style="color:#000080;font-weight:bold;">end</span>;
<span class="hljs-keyword" style="color:#000080;font-weight:bold;">end</span>.