크라우니뱅크 한글 계좌번호 시스템 v4.0
개요
크라우니뱅크에 한글 9x9x9 계좌번호 시스템을 도입했다. 729개 한글 글자(초성9 x 중성9 x 종성9)로 구성된 고유 계좌 체계.
- 계좌번호 길이: 3~9자 (3자 기본 = 3.87억 주소공간, 9자 최대 = 5.5×10^25)
- 자동생성: SHA256 해시 → mod 729 인덱싱으로 고유 3자 계좌
- 직접선택: 고객이 원하는 한글 조합 선택 가능
구현된 것
계좌.한선 모듈 (~570줄)
- 729자 한글 매핑 테이블 (9그룹 × 81자 — VM UTF-8 버그 회피)
- SHA256 해시 기반 자동 계좌 생성
- 12개 API 함수 (등록, 로그인, 검색, 가용확인 등)
- WAL 영속성 (K=고객, A=계좌맵, H=전화맵 타입)
12개 새 API 엔드포인트
- 인증 불필요: register, login, login-phone, available, search, charset
- 인증 필요: info, list, create, link-genesis, password, profile
프론트엔드 업데이트 (wallet.html)
- 3탭 로그인: 계좌 로그인 / 신규가입 / 제네시스
- 전화번호 로그인 지원
- 실시간 계좌 가용성 확인
- 서버 연동 잔액 로딩
핵심 버그 수정
VM 균형3진 나눗셈 문제
80/81=1 (표준 정수 나눗셈은 0). VM의 "자연 반올림" 나눗셈이 |remainder| ≤ |divisor|/2 규칙을 따르기 때문. 해결: 나눗셈 대신 범위 비교 사용 (인덱스 < 81 → G0, 인덱스 < 162 → G1, ...), 모듈로 대신 감산 루프 사용.
VM UTF-8 글자수 오버카운트
729자 한국어 문자열에서글자수 = 845 (실제 729), 글자(s, 400) = "i" (잘못된 값).해결: 729자 문자열을 81자 그룹 9개로 분할. 81자 문자열에서는 글자수와 글자 모두 정확.
그리고 연산자 문제
hanseonc_high 컴파일 코드에서 만약 (A == "X" 그리고 B == "Y") 형태가 라우트 매칭 실패.해결: 모든 그리고 → && 치환.
관련 파일
/Users/ef/crowny-bank/src/계좌.한선— 계좌 모듈/Users/ef/crowny-bank/src/크라우니뱅크.한선— 메인 서버 (63 엔드포인트)/Users/ef/crowny-bank/web/wallet.html— 프론트엔드/Users/ef/crowny-data/bin/bank.toau— 컴파일된 바이너리/Users/ef/CrownyOS/crownyc/crownyc.c— VM (HASH_GET, HASH_KEYS 수정)
729 문자셋
초성: ㄱ ㄴ ㄷ ㄹ ㅁ ㅂ ㅅ ㅇ ㅎ
중성: ㅏ ㅓ ㅗ ㅜ ㅡ ㅣ ㅐ ㅔ ㅚ
종성: (없음) ㄱ ㄴ ㄹ ㅁ ㅂ ㅅ ㅇ ㅎ
예: 강남북 = (ㄱ+ㅏ+ㅇ)(ㄴ+ㅏ+ㅁ)(ㅂ+ㅜ+ㄱ) — 모두 729자 안에 포함
잔여 이슈
- VM
글자수UTF-8 오버카운트 근본 수정 필요 (현재 우회) - 계좌 검색이 제네시스 연결 계좌를 못 찾음 (지갑DB 키가 GEN-코드)
- 게이트웨이 연동 시 URL 인코딩 한글 처리 확인 필요