반응형
주식이나 파생상품 등 거래소에서 거래되는 상품 (혹은 거래되지 않더라도 코드가 필요한 상품) 에는 모두 ISIN코드가 부여됩니다.
한국거래소에서도 ISIN코드를 부여 하는데요, ISIN코드는 11자리의 정보 + 1자리 체크 디지트로 구성됩니다.
체크 디지트는 12자리 ISIN코드가 정상적인 코드인지 정합성을 확인하기 위한 코드입니다.
오늘은 ISIN코드 중 11자리를 입력하면, 나머지 체크 디지트 1자리를 계산하는 파이썬 코드를 공유해 봅니다.
def calc_checkdigit(isin): """Calculate and return the check digit""" #Convert alpha characters to digits isin2 = [] for char in isin: if char.isalpha(): isin2.append((string.ascii_uppercase.index(char.upper()) + 9 + 1)) else: isin2.append(char) #Convert each int into string and join isin2 = ''.join([str(i) for i in isin2]) #Gather every second digit (even) even = isin2[::2] #Gather the other digits (odd) odd = isin2[1::2] #If len(isin2) is odd, multiply evens by 2, else multiply odds by 2 if len(isin2) % 2 > 0: even = ''.join([str(int(i)*2) for i in list(even)]) else: odd = ''.join([str(int(i)*2) for i in list(odd)]) even_sum = sum([int(i) for i in even]) #then add each single int in both odd and even odd_sum = sum([int(i) for i in odd]) mod = (even_sum + odd_sum) % 10 return (10-mod)%10
검사숫자를 산출하는 방법은 거래소의 "표준코드 관리기준" 에 설명되어 있습니다. (구글링 해 보시면 맨 위에 나오는 문서입니다)
코드를 보시면 산출방법이 그대로 잘 구현되어 있습니다.
- 숫자는 그대로 두고, 알파벳 문자인 경우 A=10, B=11 ... Z=35로 변환
isin2.append((string.ascii_uppercase.index(char.upper()) + 9 + 1)) - 숫자열의 우측부터 2배, 1배, 2배 ... 계산 : 숫자열이 홀수인 경우 짝수번째 숫자들을 2배 곱하고, 짝수인 경우 홀수번째 숫자들을 2배 곱합니다.
even = isin2[::2]
odd = isin2[1::2]
if len(isin2) % 2 > 0:
even = ''.join([str(int(i)*2) for i in list(even)])
else:
odd = ''.join([str(int(i)*2) for i in list(odd)]) - 위에서 계산된 일련의 숫자들을 1자리마다 가산하고, 그 수의 첫 자리 (10으로 나눈 나머지) 를 10에서 뺀 숫자가 검사 숫자가 됩니다. 10인 경우 0이 검사숫자가 되므로 해당 값을 다시 10으로 나눈 나머지값이 최종 결과물이 됩니다.
even_sum = sum([int(i) for i in even])
#then add each single int in both odd and even
odd_sum = sum([int(i) for i in odd])
mod = (even_sum + odd_sum) % 10
return (10-mod)%10
반응형