RosettaCodeData/Task/SEDOLs/PowerShell/sedols.psh

49 lines
1.2 KiB
Plaintext

function Add-SEDOLCheckDigit
{
Param ( # Validate input as six-digit SEDOL number
[ValidatePattern( "^[0123456789bcdfghjklmnpqrstvwxyz]{6}$" )]
[parameter ( Mandatory = $True ) ]
[string]
$SixDigitSEDOL )
# Convert to array of single character strings, using type char as an intermediary
$SEDOL = [string[]][char[]]$SixDigitSEDOL
# Define place weights
$Weight = @( 1, 3, 1, 7, 3, 9 )
# Define character values (implicit in 0-based location within string)
$Characters = "0123456789abcdefghijklmnopqrstuvwxyz"
$CheckSum = 0
# For each digit, multiply the character value by the weight and add to check sum
0..5 | ForEach { $CheckSum += $Characters.IndexOf( $SEDOL[$_].ToLower() ) * $Weight[$_] }
# Derive the check digit from the partial check sum
$CheckDigit = ( 10 - $CheckSum % 10 ) % 10
# Return concatenated result
return ( $SixDigitSEDOL + $CheckDigit )
}
# Test
$List = @(
"710889"
"B0YBKJ"
"406566"
"B0YBLH"
"228276"
"B0YBKL"
"557910"
"B0YBKR"
"585284"
"B0YBKT"
"B00030"
)
ForEach ( $PartialSEDOL in $List )
{
Add-SEDOLCheckDigit -SixDigitSEDOL $PartialSEDOL
}