GCD Decoder
Paste the gcd value from your own hit and see what Consent Mode v2 actually sent. Nothing leaves your browser.
How a gcd value is built
The string is always twelve characters: a format version, four pairs by consent type and three service characters. Here is the same example split into parts:
1 3t 3t 3t 3t 5 l 1version | ad_storage | analytics_storage | ad_user_data | ad_personalization | service
A letter is a number
Every character is a number from 0 to 63 - its position in Google's alphabet. Meaning is carried by the binary bits of that number, not by the letter itself.
0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_
State codes
0- nothing is known1- not set2- denied3- granted
What a pair of characters holds
- first character - type delegation (bits 3-2) and the implicitly inferred state (bits 1-0)
- second character - declared before interaction (5-4), site default (3-2), the answer from the person (1-0)
The three service characters
- tenth - bit 3 - the GPC signal; bit 2 - whether a consent manager is active; bits 1-0 - the allow_ad_personalization_signals parameter
- eleventh - Tag Manager container defaults: ad_storage (5-4), analytics_storage (3-2), ad_user_data (1-0)
- twelfth - bit 2 - whether container defaults were applied; bits 1-0 - the container default for ad_personalization
Which one wins
The person's answer outranks the site default, and the default outranks the implicitly inferred state. That is the order the decoder picks the final state in.
The formula was read off the gtag.js code (function xu) and verified by reproduction: the constant 13t3t3t3t5l1 that an unconfigured gtag sends is rebuilt character for character.