✅ 사주 알고리즘, 어디서부터 시작했을까?

사주팔자(四柱八字)를 구성하기 위해선 연, 월, 일, 시의 간지를 정확하게 계산해야 합니다.
이 계산은 단순히 날짜만으로는 해결되지 않고, 절기, 시간 단위, 간지 순환 규칙 등 복합적인 요소를 고려해야 하죠.

저는 이전에 Python으로 구현된 알고리즘을 기반으로 사주 계산 로직을 PHP로 옮기는 작업을 시작했습니다.
그러나 언어 간의 차이와 천문력 구조에 따른 계산 기준 차이 때문에 그냥 옮기기만 해선 안 되었습니다.

🧠 사주 계산을 위한 기본 규칙 정리

기둥기준
년주입춘 기준으로 해가 바뀜
월주각 절기(입춘, 경칩, 청명 등) 기준으로 월이 바뀜
일주양력 기준 일자에 따라 고정된 간지
시주일간 기준으로 시간마다 바뀜 (2시간 단위)

🔁 60갑자 배열 구현

사주 계산의 핵심은 10간 + 12지의 조합인 60갑자 배열입니다.
Python에서는 리스트로 구성했는데, PHP에서는 배열로 정적으로 작성하였습니다.

💡 배열의 순서가 조금만 틀려도 전체 사주 계산이 엉망이 되므로, Python의 리스트와 100% 동일한 순서로 구성해야 했습니다.

⚙️ 실제 간지 계산 함수 구성 (PHP)

1. 연간지 (년주)

2. 월간지 (월주)

🛠️ 파이썬과 PHP의 차이에서 발생한 문제들

1. % 연산자 차이

  • Python: 음수도 순환 잘 됨
  • PHP: 음수 나머지 연산 시 예상치 못한 값 발생

💡 해결: ($index + 60) % 60처럼 항상 양수로 보정

2. 월운 간지 오차

월운이 실제 만세력과 다르게 출력되는 문제 발생. 확인 결과, 기준 연도를 출생년도로 잘못 사용하고 있었음.

📅 월운 계산 함수

🔄 대운, 세운 계산도 구현

대운은 월간지를 기준으로, 10년 단위 간지 흐름을 계산합니다.
세운은 현재부터 10년간의 연도별 간지를 나열합니다.

이들도 역시 60갑자 순환 배열과 % 계산을 기반으로 구현했습니다.

✅ 마무리

2편에서는 Python 기반의 사주 계산 로직을 PHP로 변환하면서 겪은 시행착오와 주요 구현 내용을 공유했습니다.

  • 간지 배열 순서 오류는 절대 피해야 함
  • 절기 기준 날짜·시각이 핵심
  • Python과 PHP의 % 계산 차이 주의
  • 월운은 출생연도가 아니라 “보려는 해” 기준으로 계산해야 함

📌 다음 편 예고

👉 [3편] 사용자 입력부터 결과 출력까지 – 완성 및 배포

📌 만세력 테스트하러 가기

Beta test 해보기(클릭)

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다