SEDOLs: Difference between revisions

Content added Content deleted
(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}}==