Stock Exchange Daily Official List
SEDOL adalah sebuah singkatan untuk Stock Exchange Daily Official List atau daftar pengkodifikasian indentitas dari sebuah sekuritas yang digunakan di Inggris Raya pada lembaga kliring. Penomoran ini diberikan oleh London Stock Exchange atas permintaan penerbit sekuritas dan ketentuan SEDOL ini berlaku sebagai National Securities Identifying Number / NSIN bagi keseluruhan penerbitan sekuritas di Inggris Raya dan juga merupakan bagian dari International Securities Identification Number disingkat ISIN sebagaimana dengan ketentuan kodifikasi penomoran internasional yang berlaku secara global.
Penjelasan
[sunting | sunting sumber]SEDOL pada periode sebelum 26 Januari 2004 awalnya terdiri atas tujuh buah karater angka yang dibagi kedalam 2 bagian pengertian yaitu enam angka awal dan satu angka akhir sebagai digit pengkontrolan. pemakaian SEDOL untuk Asia dan Afrika dimulai dengan angka 6, sedangkan untuk Inggris Raya dimulai dengan angka 0 atau 3 dan untuk Amerika Serikat dimulai dengan angka 2. Kemudian pada periode sesudah 26 Januari 2004, SEDOL berubah menjaadi campuran karakter huruf dengan angka, seperti dimulai dengan B000009. dalam ketentuan SEDOL yang baru huruf hidup tidak dipergunakan lagi pada posisi capuran huruf dan angka.
Angka pengontrolan pada SEDOL pembuatan penjumlahan keseluruhan tujuh karakter tersebut dengan angka 10. pada angka pengontrolan adalah hasil perhitungan dari penjumlahan enam karakter pendahulunya. pada huruf melekat nilai 9 kemudian ditambahkan dengan nilai urutan huruf, sebagaimana pada B = 11 dan Z = 35. walaupun huruf hidup tidak dipergunakan lagi pada SEDOL akan tetapi pada penghitungan tidak menghilangkan bobot penjumlahan (contoh: H = 17 dan J = 19), guna mempermudahkan perhitungan berikut rangkaian faktor penjumlahannya:
Pertama 1 Kedua 3 Ketiga 1 Keempat 7 Kelima 3 Keenam 9 Ketujuh 1 (digit pengontrolan)
Nilai perkalian karakter pada bobotnya sedangan digit pengontrolan diperoleh dari hasil penjumlahannya dengan nilai 10, dimana dapat disebut keseluruhan enam karakter dikalikan sebagai berikut (10 - (jumlah dari modul 10) modul 10 sebagai penomoran sekuritas di Inggris Raya, SEDOL tetap berinduk pada ISIN dengan penambahan awalan 00 di depan kemudian diberlakukan ketentuan ISIN pada digit pengontrolannya.
Contoh
[sunting | sunting sumber]BAE Systems: 0263494
The checksum can be calculated by multiplying the first six digits by their weightings:
(0×1, 2×3, 6×1, 3×7, 4×3, 9×9) = (0, 6, 6, 21, 12, 81)
Then summing up the results:
0 + 6 + 6 + 21 + 12 + 81 = 126
The check digit is then calculated by:
(10 - (126 modulo 10)) modulo 10 = (10 - 6) modulo 10 = 4
In Delphi
[sunting | sunting sumber]function GetSedolCheckDigit(const BaseSedol: string): Integer;
const
Weights: array[1..6] of Integer = ( 1, 3, 1, 7, 3, 9 );
var
i, d: Integer;
begin
if Length(BaseSedol) <> 6 then
raise Exception.Create(
'SEDOLs without a check-digit must six characters long');
Result:= 0;
for i:= 1 to 6 do begin
case BaseSedol[i] of
'0'..'9': d:= Ord(BaseSedol[i]) - Ord('0');
'A'..'Z': d:= Ord(BaseSedol[i]) - Ord('A') + 10;
else
raise Exception.Create(
'SEDOLs must have only digits and uppercase letters');
end;
Inc(Result, d * Weights[i]);
end;
Result:= (10 - (Result mod 10)) mod 10;
end;
In J
[sunting | sunting sumber](other formulations as possible; some twice as fast[1]):
sn =. '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ' NB. SEDOL numerals acs =: (10 | 1 3 1 7 3 9 +/@:* -)&.(sn i. |:) NB. Checksum
In Perl
[sunting | sunting sumber]use POSIX qw(strtol);
my @weights = (1, 3, 1, 7, 3, 9);
sub sedol_check_digit
{
my ($sedol) = @_;
die "invalid SEDOL format: `$sedol'\n"
if $sedol !~ /^[0-9A-Z]{6,7}$/;
my @chars = split //, $sedol;
my $sum = 0;
for my $i ( 0 .. $#weights )
{
my $char = $chars[$i];
my $value = (strtol $char, 36)[0];;
$sum += $value * $weights[$i];
}
return (10 - ($sum % 10)) % 10;
}
In Python
[sunting | sunting sumber]# constants
sedolweight = [1,3,1,7,3,9,1]
def check(sedol):
return len(sedol) == 7 and \
sedol.isalnum() and \
all(ch not in 'AEIOU' for ch in sedol) and \
sum(int(ch, 36) * sedolweight[n]
for n,ch in enumerate(sedol)
) % 10 == 0
def checksum(sedol):
tmp = sum(int(ch,36) * sedolweight[n]
for n,ch in enumerate(sedol[:6])
)
return str( (10 - (tmp % 10)) % 10)
sedol = '0263494'
print sedol, checksum(sedol)
Option Explicit
Public Function getSedolCheckDigit(str As String) As Variant
' calculates the final digit of a six digit sedol code using the algo described on wikipedia
If Len(str) <> 6 Then
getSedolCheckDigit = "Six chars only please"
Exit Function
End If
Dim mult(6) As Integer
mult(1) = 1: mult(2) = 3: mult(3) = 1: mult(4) = 7: mult(5) = 3: mult(6) = 9
' didn't use Array() to avoid Option Base problems
Dim i, total As Integer
Dim s As String
total = 0
For i = 1 To 6
s = Mid(str, i, 1)
total = total + IIf(IsNumeric(s), Val(s), Asc(s) - 55) * mult(i)
Next
getSedolCheckDigit = (10 - (total Mod 10)) Mod 10
End Function
function IsSedolValid(const Sedol: string): Boolean;
function HasOnlyValidChars: Boolean;
const
ValidChars = ['0'..'9', 'A'..'Z'];
var
ch: Char;
begin
for ch in Sedol do begin
if not (ch in ValidChars) then begin
Result:= False;
Exit;
end;
end;
Result:= True;
end;
begin
Result:= (Length(Sedol) = 7)
and HasOnlyValidChars
and (GetSedolCheckDigit(Copy(Sedol, 1, 6)) = Ord(Sedol[7]) - Ord('0'));
end;
Referensi
[sunting | sunting sumber]- ^ Bron, Dan; Rich, Henry; Hui, Roger, Check digit utility