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

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

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


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;

(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
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;
}
# 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
  1. ^ Bron, Dan; Rich, Henry; Hui, Roger, Check digit utility 

Lihat pula

sunting

Pranala luar

sunting