TreeInsight.org에서 검색가능한 모든 문서는 숫자 6자리로 구성되어 있는 고유한 문서코드(DocuCode)가 부여되어 있습니다.

즉, 검색가능한 모든 문서의 하단에는 문서코드와 해당 씨드가 기재되어 있습니다.

 

 

문서코드의 생성 알고리즘

 

문서코드는 다음과 같은 순서로 생성됩니다.

  1. 문서작업일시와 시간에 'sd'라는 접두사를 붙인 값을 씨드(Seed)로 한다.
  2. 씨드의 sha256 해시값을 구한다.
  3. 그 해시값의 앞부터 차례로 숫자 6개를 구하여 임시 문서코드로 정한다.
  4. 임시 문서코드가 과거에 사용된 적이 없으면, 문서코드로 확정한다.   

참고로 문서코드는 제일 앞자리가 0이 될 수 없습니다. (문서코드 5자리의 문서는 별도로 예약되어있음)

 

위와 같은 내용을 구현한 알고리즘이 아래와 같습니다. (Python 3.7에서 작성)

# -*- coding: utf-8 -*-

"""
기    능 : 시간을 기반으로 sha256값을 구하여 앞에서부터 순서대로 숫자 6개를 뽑기
입    력 : (없을경우)현재시각, (있을경우)sd"yymmddhhmmss" 구조(14자리)
출    력 : seed (ex. sd211102094019), code (ex. 262087)
주의사항 : code의 제일 앞자리는 0이 아닌 것으로만 출력함
작성날짜 : 2021. 11. 2.
수정날짜 : 2021. 11. 2. 
"""


import sys
import hashlib
import datetime
import time
import re
# import easygui as i


def document_code(seed):
    
    seed_sha256 = hashlib.sha256(seed.encode())
    result = re.sub(r'[^0-9]', '', seed_sha256.hexdigest())[:6]
    
    return result


def time_seed():

    seed = 'sd' + datetime.datetime\
              .now().strftime("%y%m%d%H%M%S")
    
    return
seed


if __name__ == '__main__' :
    
    #입력값을 seed로 하되, 입력이 없거나 부적절하게 주어지면 현재시각으로 seed를 만듬
    #단, code의 앞자리가 0으로 추출되면 1초를 기다린 후, 다시 계산함

    
    try:
        seed = sys.argv[1]
    except:
        seed = time_seed()

    try:
        if len(seed) != 14 or seed[:2] !="sd" :
            raise
    except:
        print("입력값을 지정하려면, 반드시 sd'yymmddhhmmss'형식(14자. ex. sd211102094019)으로 입력해야 합니다!")
        sys.exit(0)
                
    working = True

    while(working):
        
        code = document_code(seed)
        
        if code[0] == '0':
            time.sleep(1)
            seed = time_seed()
        else:
            working = False
    
    seed_txt = "seed : " + seed
    code_txt = "code : " + code
    insert_txt = "#" + code + " #" + seed
    
    print(seed_txt)
    print(code_txt + "\n")
    print(insert_txt)

    # i.msgbox(seed_txt + "\n" + code_txt + "\n\n\n" + insert_txt)

 

 

문서코드의 사용방법

 

'자료검색'에서 문서코드를 입력하면, 해당 문서를 검색할 수 있습니다.

 

 

#761511 #sd211102135238