Methodology

How this calculator decides what your chart is

Most BaZi sites disagree with each other about the rules — and it is usually impossible to tell which ones a given chart used. So we publish ours. This page states the engine version, every convention in force, and a worked example you can reproduce yourself.

The short version

Your chart is produced by a deterministic engine — not by a language model. The same engine version, given the same birth details, always returns the same eight characters. The AI writes prose about the chart; it never computes it.

The engine

The chart engine is written for this site and versioned like software: engine v1.1.0. Every chart you calculate and every report you order carries the version that produced it, so a result can always be traced back to the rules that generated it.

Underneath, the astronomical calendar data comes from lunar-javascript 1.7.7 — solar-term instants, lunar dates, IANA time zones and historical daylight-saving offsets. Everything above that layer — the pillar sequencing, the five-element tally, the ten-god relationships, the luck-pillar derivation — is ours.

There is no randomness anywhere in the pipeline. Two people with identical birth data, entered into the same engine version, get identical charts — which is what makes the worked example below checkable.

Conventions in force

These are applied to every chart, in this order. Where schools of practice differ, we say which side we take rather than quietly picking one.

Year pillar
Changes at the exact astronomical moment of 立春 (Start of Spring) — never on 1 January.
yearBoundary: lichun-exact-moment
Month pillar
Changes at each of the 12 节 (立春, 惊蛰, 清明, 立夏, 芒种, 小暑, 立秋, 白露, 寒露, 立冬, 大雪, 小寒) — not at the lunar month start, and not at the 12 中气.
monthBoundary: jie-exact-moment
Day pillar
Changes at midnight (00:00) local solar time.
dayBoundary: midnight
Late 子 hour (23:00–23:59)
The day pillar stays on the current date, but the hour stem is taken from the next day’s day stem (晚子时).
lateZiHourStem: next-day-stem
Time basis
True solar time by default — your clock time is corrected for longitude and the equation of time. You can switch it off.
defaultTimeBasis: true-solar-time
Luck pillars 大运
Step from the month pillar in sixty-cycle order. Start age = days from birth to the nearest 节 ÷ 3 (three days = one year).
qiYunBasis: birth-to-jie-days-over-3
Luck pillar direction
Yang year + male and Yin year + female count forward; the other two combinations count back. Gender left blank is treated as male.
luckPillarDirection: yang-male-forward
Calendar tables
lunar-javascript 1.7.7 — astronomical solar-term times, IANA time zones, historical DST offsets.
engine.library

A worked example, to the minute

This case is chosen because it sits on a knife edge. Enter it yourself and you should get the same eight characters on any engine v1.1.0 build.

Input

Date
4 Feb 1990
Time
10:00
Place
Taipei, Taiwan
Time zone
Asia/Taipei
True solar time
off

Nearest 节

Previous: 大寒, 20 Jan 1990 16:01
Next: 立春, 4 Feb 1990 10:14

Year 年

己巳

Jǐ Sì

Direct Seal 正印

Month 月

丁丑

Dīng Chǒu

Direct Officer 正官

Day 日

庚子

Gēng Zǐ

Day Master · Yang Metal

Hour 时

辛巳

Xīn Sì

Rob Wealth 劫财

Five-element tally

a straight count of the eight characters

木 Wood0 (absent)火 Fire3 (38%)土 Earth2 (25%)金 Metal2 (25%)水 Water1 (13%)

Why this example — the fourteen-minute year

立春 fell at 10:14 that morning. This birth is at 10:00 — fourteen minutes earlier.

Move the birth time to 10:20 and the chart changes at the top: the year pillar becomes 庚午 instead of 己巳, the month pillar becomes 戊寅 instead of 丁丑, and because the year stem flips from Yin to Yang, the luck pillars reverse direction — from counting back through 小寒 to counting forward through 惊蛰.

This is what “the year doesn’t start on 1 January” actually costs. Any calculator that assigns the year pillar by calendar date gets this chart wrong, and gets it wrong silently.

The same chart’s luck cycles, computed — not drawn

Everything below is this example’s own output: eight ten-year luck pillars stepping from its month pillar 丁丑, overlaid with one hundred annual pillars from 1990. Because the year stem is 己 (yin) and no gender was given, the engine takes the yin-year default and counts the luck pillars backwards through 小寒 — which is why the first block runs 丙子, 乙亥, 甲戌 rather than forward.

Luck pillars and annual pillars · 大运流年

100 annual pillars · scroll sideways →

Before 起运

1990–1998

庚午

1990

辛未

1991

壬申

1992

癸酉

1993

甲戌

1994

乙亥

1995

丙子

1996

丁丑

1997

戊寅

1998

丙子1999–2008

ages 10–19 · Seven Killings

己卯

1999

庚辰

2000

辛巳

2001

壬午

2002

癸未

2003

甲申

2004

乙酉

2005

丙戌

2006

丁亥

2007

戊子

2008

乙亥2009–2018

ages 20–29 · Direct Wealth

己丑

2009

庚寅

2010

辛卯

2011

壬辰

2012

癸巳

2013

甲午

2014

乙未

2015

丙申

2016

丁酉

2017

戊戌

2018

甲戌2019–2028

ages 30–39 · Indirect Wealth

己亥

2019

庚子

2020

辛丑

2021

壬寅

2022

癸卯

2023

甲辰

2024

乙巳

2025

丙午

2026

丁未

2027

戊申

2028

癸酉2029–2038

ages 40–49 · Hurting Officer

己酉

2029

庚戌

2030

辛亥

2031

壬子

2032

癸丑

2033

甲寅

2034

乙卯

2035

丙辰

2036

丁巳

2037

戊午

2038

壬申2039–2048

ages 50–59 · Eating God

己未

2039

庚申

2040

辛酉

2041

壬戌

2042

癸亥

2043

甲子

2044

乙丑

2045

丙寅

2046

丁卯

2047

戊辰

2048

辛未2049–2058

ages 60–69 · Rob Wealth

己巳

2049

庚午

2050

辛未

2051

壬申

2052

癸酉

2053

甲戌

2054

乙亥

2055

丙子

2056

丁丑

2057

戊寅

2058

庚午2059–2068

ages 70–79 · Companion

己卯

2059

庚辰

2060

辛巳

2061

壬午

2062

癸未

2063

甲申

2064

乙酉

2065

丙戌

2066

丁亥

2067

戊子

2068

己巳2069–2078

ages 80–89 · Direct Seal

己丑

2069

庚寅

2070

辛卯

2071

壬辰

2072

癸巳

2073

甲午

2074

乙未

2075

丙申

2076

丁酉

2077

戊戌

2078

Before 起运

2079–2089

己亥

2079

庚子

2080

辛丑

2081

壬寅

2082

癸卯

2083

甲辰

2084

乙巳

2085

丙午

2086

丁未

2087

戊申

2088

己酉

2089

top line = stem elementbottom line = branch elementthis year

The chart’s luck cycles begin 9 years 10 months 0 days after birth (around 1999-12-04). The engine computes eight luck pillars; the annual pillars run a full hundred years from birth, so the years before 起运 and after the eighth block are shown for what they are rather than padded.

True solar time is on by default

Clocks follow time-zone boundaries; the sun does not. For the example above, switching true solar time on moves the working time from 10:00 to 09:52 — a total correction of −7.4 minutes, made of a longitude term of +6.3 and an equation-of-time term of −13.6.

Eight minutes rarely matters. But the hour pillar changes every two hours, so a correction of that size can move a birth across a boundary — and places far from their time-zone meridian drift by far more. We show the entered time, the corrected time, and both correction terms on every result, so you can always see what the engine did.

Verification

How the engine is checked

The engine ships with a self-test suite of 15 groups. It runs against published almanac anchors and against an independent implementation, not against our own assumptions.

  • ANine external almanac anchors — known published charts reproduced exactly.
  • BEvery lookup table (ten gods, hidden stems, Na Yin, element maps, zodiac) checked against the library’s own tables.
  • CIndependent hour-stem derivation (五鼠遁) over a seeded case set.
  • DDay pillar advances exactly one step per calendar day.
  • EYear pillar switches precisely at 立春, sampled across 1900–2100.
  • FMonth pillar switches at every 节, 2018–2027, plus year-stem derivation and the 春节 non-boundary case.
  • GTrue solar time: equation of time, historical DST offsets, longitude correction, end-to-end charts.
  • HUnknown-time degraded mode produces a correct three-pillar chart.
  • IInput validation rejects out-of-range and malformed dates.
  • JLuck pillars: direction rule, sixty-cycle stepping, and start age against an independent oracle.
  • KAnnual pillars (流年) against the calendar and the library’s own year pillars; the branch-interaction tables checked for symmetry, coverage and the known overlaps.
  • LSynastry (合盘): every cross-chart stem and branch pair derived from the same fixed tables, with the day-master relation read in both directions.
  • MThe ten day-master pages: their example charts are pinned so the date sequence, day master, 立春 split and luck direction can never drift from what the pages claim.
  • NZodiac pairing: the full 12×12 classification counted against the branch relations, checked for symmetry and for agreement with the tables shown on the site.
  • ODefensive input: an omitted longitude must behave identically to an explicit null rather than silently producing NaN.

One known bug is worth stating publicly. The underlying calendar library classifies births between 23:00 and 23:59 as the previous hour branch; the correct classical treatment is the next day’s 子 hour. Our engine applies the correct rule, and the self-test suite exempts that specific case from the oracle comparison rather than quietly matching the library. We name it here so nobody has to guess which behaviour they are seeing.

Self-test status: 168 / 168 cases green · engine v1.1.0 · calendar lunar-javascript 1.7.7

When you don’t know your birth time

Your hour pillar depends on your birth time, so without it there is genuinely one column missing. We do not invent one. The chart is computed from local noon: the year, month, and day pillars remain correct, the hour pillar is left blank, and the result is labelled as a three-pillar chart.

Because the day pillar is anchored at noon, the day master — which every reading is built on — is still reliable. What you lose is the hour: the ten-god relationships that only the hour column can supply, and some precision in the start age of your luck pillars. Both limits are stated on the result itself.

What this engine does not claim

  • It does not predict events. The conventions above are classical rules applied consistently; they are a model, not a forecast.
  • It does not weight the five elements by season or month. The tally is a straight count of the eight characters — we say so rather than dressing it up as a strength score.
  • It does not arbitrate between schools. Where traditions disagree — late 子 hour handling, luck-pillar direction for an unspecified gender — we declare which rule we follow, above.
  • It is not medical, legal, or financial advice, and nothing here should be acted on as such.

Check it against your own chart

The calculator is free and needs no account. Every result shows its engine version and conventions, so you can hold it to everything on this page.

BaziPattern provides AI-generated readings for entertainment and cultural exploration purposes only. Readings are not predictions, or medical, legal, or financial advice.