SEDOLs: Difference between revisions
Content added Content deleted
Langurmonkey (talk | contribs) |
Thundergnat (talk | contribs) (Rename Perl 6 -> Raku, alphabetize, minor clean-up) |
||
Line 513: | Line 513: | ||
5852842 |
5852842 |
||
B0YBKT7</pre> |
B0YBKT7</pre> |
||
=={{header|C sharp|C#}}== |
|||
<lang csharp>static int[] sedol_weights = { 1, 3, 1, 7, 3, 9 }; |
|||
static int sedolChecksum(string sedol) |
|||
{ |
|||
int len = sedol.Length; |
|||
int sum = 0; |
|||
if (len == 7) //SEDOL code already checksummed? |
|||
return (int)sedol[6]; |
|||
if ((len > 7) || (len < 6) || System.Text.RegularExpressions.Regex.IsMatch(sedol, "[AEIOUaeiou]+")) //invalid SEDOL |
|||
return -1; |
|||
for (int i = 0; i < 6; i++) |
|||
{ |
|||
if (Char.IsDigit(sedol[i])) |
|||
sum += (((int)sedol[i] - 48) * sedol_weights[i]); |
|||
else if (Char.IsLetter(sedol[i])) |
|||
sum += (((int)Char.ToUpper(sedol[i]) - 55) * sedol_weights[i]); |
|||
else |
|||
return -1; |
|||
} |
|||
return (10 - (sum % 10)) % 10; |
|||
}</lang> |
|||
=={{header|C++}}== |
=={{header|C++}}== |
||
Line 560: | Line 589: | ||
} |
} |
||
</lang> |
</lang> |
||
=={{header|C sharp|C#}}== |
|||
<lang csharp>static int[] sedol_weights = { 1, 3, 1, 7, 3, 9 }; |
|||
static int sedolChecksum(string sedol) |
|||
{ |
|||
int len = sedol.Length; |
|||
int sum = 0; |
|||
if (len == 7) //SEDOL code already checksummed? |
|||
return (int)sedol[6]; |
|||
if ((len > 7) || (len < 6) || System.Text.RegularExpressions.Regex.IsMatch(sedol, "[AEIOUaeiou]+")) //invalid SEDOL |
|||
return -1; |
|||
for (int i = 0; i < 6; i++) |
|||
{ |
|||
if (Char.IsDigit(sedol[i])) |
|||
sum += (((int)sedol[i] - 48) * sedol_weights[i]); |
|||
else if (Char.IsLetter(sedol[i])) |
|||
sum += (((int)Char.ToUpper(sedol[i]) - 55) * sedol_weights[i]); |
|||
else |
|||
return -1; |
|||
} |
|||
return (10 - (sum % 10)) % 10; |
|||
}</lang> |
|||
=={{header|Caché ObjectScript}}== |
=={{header|Caché ObjectScript}}== |
||
Line 1,404: | Line 1,404: | ||
B00030 = B000300 |
B00030 = B000300 |
||
</pre> |
</pre> |
||
=={{header|Go}}== |
=={{header|Go}}== |
||
<lang go> |
<lang go> |
||
Line 2,503: | Line 2,504: | ||
print sedol($_), "\n"; |
print sedol($_), "\n"; |
||
}</lang> |
}</lang> |
||
=={{header|Perl 6}}== |
|||
{{trans|Perl}} |
|||
{{Works with|rakudo|2015-12-17}} |
|||
<lang perl6>sub sedol( Str $s ) { |
|||
die 'No vowels allowed' if $s ~~ /<[AEIOU]>/; |
|||
die 'Invalid format' if $s !~~ /^ <[0..9B..DF..HJ..NP..TV..Z]>**6 $ /; |
|||
my %base36 = (flat 0..9, 'A'..'Z') »=>« ^36; |
|||
my @weights = 1, 3, 1, 7, 3, 9; |
|||
my @vs = %base36{ $s.comb }; |
|||
my $checksum = [+] @vs Z* @weights; |
|||
my $check_digit = (10 - $checksum % 10) % 10; |
|||
return $s ~ $check_digit; |
|||
} |
|||
say sedol($_) for < |
|||
710889 |
|||
B0YBKJ |
|||
406566 |
|||
B0YBLH |
|||
228276 |
|||
B0YBKL |
|||
557910 |
|||
B0YBKR |
|||
585284 |
|||
B0YBKT |
|||
B00030 |
|||
>;</lang> |
|||
=={{header|Phix}}== |
=={{header|Phix}}== |
||
Line 3,097: | Line 3,068: | ||
#f |
#f |
||
invalid checksum</pre> |
invalid checksum</pre> |
||
=={{header|Raku}}== |
|||
(formerly Perl 6) |
|||
{{trans|Perl}} |
|||
{{Works with|rakudo|2015-12-17}} |
|||
<lang perl6>sub sedol( Str $s ) { |
|||
die 'No vowels allowed' if $s ~~ /<[AEIOU]>/; |
|||
die 'Invalid format' if $s !~~ /^ <[0..9B..DF..HJ..NP..TV..Z]>**6 $ /; |
|||
my %base36 = (flat 0..9, 'A'..'Z') »=>« ^36; |
|||
my @weights = 1, 3, 1, 7, 3, 9; |
|||
my @vs = %base36{ $s.comb }; |
|||
my $checksum = [+] @vs Z* @weights; |
|||
my $check_digit = (10 - $checksum % 10) % 10; |
|||
return $s ~ $check_digit; |
|||
} |
|||
say sedol($_) for < |
|||
710889 |
|||
B0YBKJ |
|||
406566 |
|||
B0YBLH |
|||
228276 |
|||
B0YBKL |
|||
557910 |
|||
B0YBKR |
|||
585284 |
|||
B0YBKT |
|||
B00030 |
|||
>;</lang> |
|||
=={{header|REXX}}== |
=={{header|REXX}}== |