Fifteen people were killed in Soweto as they enjoyed a night out, police said, when assailants drew up in a minibus taxi and began randomly firing high-caliber guns at drinkers.
In another gunfire bloodbath, police in the eastern city of Pietermaritzburg, in KwaZulu-Natal, reported four people were killed and eight wounded in a bar when two men fired discriminately at customers.
For the police it was too early to say if the assaults were in some way connected, but they observed their similarity.
In Soweto, Johannesburg's largest township to the southwest of South Africa's economic capital, police were called to the scene shortly after midnight.
"When we arrived at the scene, 12 people were dead with gunshot wounds," police officer Nonhlanhla Kubheka told AFP.
"Nobody has been arrested. They came and shot at people who were having fun," said Kubheka.
The dead, who included two women, were aged between 19 and 35, provincial police chief Elias Mawela told AFP.
"According to witnesses they shot randomly," said Mawela, adding forensic police were still collecting evidence.
There were no details regarding the assailants.
In Pietermaritzburg, four people were killed and eight wounded around 8:30 pm (1830 GMT) on Saturday, local police spokesman Nqobile Gwala said.
Two men drove up, entered the bar and "fired random shots at the patrons", before fleeing, Gwala said.
He detailed that "A total of 12 people were shot. Two people were declared dead at the scene and the other two died in hospital."
"Another eight people are still in hospital after they sustained injuries," Gwala added.
Local mayor Mzimkhulu Thebola said the assault was over very quickly without any robbery, conversation or fight.
"Every week we get news of people that have just been shot at randomly," said Thebola,