How to resolve the algorithm Validate International Securities Identification Number step by step in the jq programming language

Published on 12 May 2024 09:40 PM
#Jq

How to resolve the algorithm Validate International Securities Identification Number step by step in the jq programming language

Table of Contents

Problem Statement

An International Securities Identification Number (ISIN) is a unique international identifier for a financial security such as a stock or bond.

Write a function or program that takes a string as input, and checks whether it is a valid ISIN. It is only valid if it has the correct format,   and   the embedded checksum is correct. Demonstrate that your code passes the test-cases listed below.

The format of an ISIN is as follows:

For this task, you may assume that any 2-character alphabetic sequence is a valid country code. The checksum can be validated as follows:

(The comments are just informational.   Your function should simply return a Boolean result.   See #Raku for a reference solution.)

Related task:

Let's start with the solution:

Step by Step solution about How to resolve the algorithm Validate International Securities Identification Number step by step in the jq programming language

Source code in the jq programming language

# This filter may be applied to integers or integer-valued strings
def luhntest:
  def digits: tostring | explode | map([.]|implode|tonumber);
  (digits | reverse) 
  | ( [.[range(0;length;2)]] | add ) as $sum1
  | [.[range(1;length;2)]]
  | (map( (2 * .) | if . > 9 then (digits|add) else . end) | add) as $sum2
  | ($sum1 + $sum2) % 10 == 0;

def decodeBase36:
  # decode a single character
  def d1:
    explode[0]
    # "0" is 48; "A" is 65
    | if . < 65 then . - 48
      else . - 55
      end;
  def chars: explode | map([.]|implode);
  chars | map(d1) | join("");

def is_ISIN:
  type == "string"
  and test("^(?<cc>[A-Z][A-Z])(?<sc>[0-9A-Z]{9})(?<cs>[0-9])$")
  and (decodeBase36 | luhntest);

def task:
  "US0378331005",
  "US0373831005",
  "U50378331005",
  "US03378331005",
  "AU0000XVGZA3",
  "AU0000VXGZA3",
  "FR0000988040"
  |  . + " => " + (if is_ISIN then "valid" else "invalid" end);

task

  

You may also check:How to resolve the algorithm Empty program step by step in the LC3 Assembly programming language
You may also check:How to resolve the algorithm 100 doors step by step in the EMal programming language
You may also check:How to resolve the algorithm Concurrent computing step by step in the Rhope programming language
You may also check:How to resolve the algorithm Literals/String step by step in the AWK programming language
You may also check:How to resolve the algorithm Brazilian numbers step by step in the ALGOL W programming language