평안남도 중부 내륙지대에 있는 군. 북부는 덕천시, 서부는 개천시, 남서부는 순천시, 남부는 은산군, 남동부는 신양군, 동부는 맹산군과 접해 있다. 서북~동남(봉창리~가평리) 간의 길이는 44km이고, 북동~남서(회안리~송남노동자구) 간의 길이는 20km이다. 현재 행정구역은 1읍 9구 20리로 구성되어 있으며 군 소재지는 북창읍이다.
1952년 군을 신설하면서 옥천면(玉泉面) 소재지지역이었던 북창리(창동)의 이름을 살려 북창군이라 하였다. ‘북창’은 조선시기 자모산성(慈母山城, 지금의 평성시지역)의 기본 쌀창고, 현재의 연류리지역에 임시 쌀창고가 있었는데, 후에 또 하나의 창고를 설치하면서 세 창고 가운데서 북쪽에 위치해 있는 창고라는 데서 비롯된 지명이다.
1954년에 관하리 일부와 연류리 일부를 병합하여 양촌리(楊村里)를 신설하고, 성천군의 신평리(新坪里)를 흡수하면서 소창리 일부를 신평리에 편입하였다. 동시에 삼흥리를 덕천군에 이관하였다. 1967년에 대평리 일부가 용산리에, 용산리 일부가 석산리에 편입되었고, 양촌리와 대평리 일부를 병합하여 북창노동자구(北倉勞動者區)로, 채령리를 송남노동자구(松南勞動者區)로 각각 개편하였다. 1972년에 북창읍이 북창노동자구로 강등되면서 원 북창노동자구를 북창읍으로 승격하였다. 1981년에 풍곡리를 풍곡노동자구(豊穀勞動者區)로, 용포리를 인포노동자구(芢浦勞動者區)로 각각 개편하였고, 1984년에 개천군의 봉창리(鳳倉里)를 흡수하였다. 1990년 10월 대평리 일부를 북창노동자구에 편입하였고, 1992년에 신평리를 은산군에 이관하였다가, 1994년에 다시 흡수하였다.
1995년 8월 석산리와 원평리 일부·용산리 일부를 병합하여 득장지구(得將地區)를 신설하였으며, 원평리 나머지 일부를 용산리에 편입하고 원평리를 폐지하였다. 1997년에 관하리가 관하노동자구(官下勞動者區)로 승격되었다. 2000년 1월에 득장지구가 폐지되고 소속된 전체 노동자구가 편입되었다. 2003년 현재 행정구역은 1읍(북창읍), 9구(갈골노동자구, 관하노동자구, 득장노동자구, 명학노동자구, 보업노동자구, 북창노동자구, 송남노동자구, 인포노동자구, 풍곡노동자구), 20리(가평리, 광로리, 남상리, 남양리, 대평리, 용산리, 매현리, 봉창리, 삼리, 상하리, 소창리, 송림리, 송사리, 수옥리, 신복리, 신석리, 신평리, 연류리, 잠상리, 회안리)로 구성되어 있다. 북창군 소재지는 북창읍이다.