[ 파워빌더.공통함수 - 10진수 <-> 36진수 ]

 

☞   

 

응? 파워빌더에서 진수 변환을 쓸 일이 있을까?

오늘 드디어 쓰게 됐네요. ^^;

 

PK는 1개 이고..

MS SQL NChar(17) 로 만들어진 테이블이 있습니다.

중복 방지용으로만 코드를 만들었으면,

정말 넘치고 넘칠 정도로 데이터를 저장 할 수 가 있습니다.

 

예) YYYYMMDD+SEQ(9)

(연번을 9자리 주는 경우는 없죠 ㅡㅡㅋ)

 

근데, 문제는 코드 생성을 각각 자리마다 무언가 의미를 주다보니

Sequence를 겨우 2자리만 쓸 수 있는 상태입니다.

 

즉, "01" ~ "99"... "100" Error!!!!

관계있는 Table도 있어서 18자리로 늘리기도 힘들고..

 

그래서 머리 굴린 결과... ('' ) ( '') ( ..) (.. ) 데구르르 ~~

0~9 A~Z 총 36개 문자를 이용해서 36진수로 해결하자.

2자리로도 "01" ~ "ZZ" 까지 총 1295개 처리가 가능하더라구요.

Sort 도 문제 될게 없고.. 굿~!

 

Table 설계 하시는 분.. 개발자를 위해서 Seq 넉넉하게 잡아주세요!!!

또, Seq 짧게 잡으면 미워합니다. ㅎㅎㅎ

 

 

//------------------------------------------

// 10진수 -> 36진수 변환

// gf_decto36(Decimal ad_Value) Return String

//------------------------------------------

String  ls_Char, ls_36
Decimal ld_Num


Do While ad_Value > 0
 ld_Num = Mod(ad_Value, 36)
 ls_Char = Mid("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ", ld_Num + 1, 1)
 ls_36  = ls_Char + ls_36
 ad_Value = Int(ad_Value / 36)
Loop

Return ls_36

 

 

//------------------------------------------

// 36진수 -> 10진수 변환

// gf_36todec(String as_Value) Return Decimal

//------------------------------------------

String  ls_Reverse, ls_Char
Decimal ld_Pos, ld_Num, ld_Dec


ls_Reverse = Reverse(as_value)

For ld_Pos = 1 To Len(ls_Reverse)
 ls_Char = Upper(Mid(ls_Reverse, ld_Pos, 1))
 ld_Num = Pos("123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ", ls_Char)
 ld_Dec = ld_Dec + ( ld_Num * ( 36 ^ ( ld_Pos - 1 ) ) )
Next

Return ld_Dec

Posted by 농부지기
,