Virat Kohli scored his 30th Test century in India's stunning win in Perth last week. Here, Rahul Iyer ranks all his centuries, from best to worst.

Virat Kohli scored his 30th Test century in India's stunning win in Perth last week. Here, Rahul Iyer ranks all his centuries, from worst to best.

Kohli reminded us all of what he looks like in full flow during his 100* in Perth – something we can be forgiven for given his lean run. But there are now 30 three-figure scores for us to cherish, and some won't fade away, no matter how hard you try. Here are all 30, ranked from worst to best.

30. 103* v Sri Lanka, Galle, 26 Jul 2017

India already led by 309 runs by the time their second innings started in this match. They were playing for a declaration on a flat deck, and Kohli promptly delivered. There's no such thing as a bad Test hundred, but something has to come last here.

29. 139 v West Indies, Rajkot, 4 Oct 2018

India batted only once in this Test match. Kohli played well for 139, but West Indies had Keemo Paul opening the bowling, hardly the sign of a top-class attack. Prithvi Shaw and Ravindra Jadeja also scored centuries in that innings.

28. 213 v Sri Lanka, Nagpur, 24 Nov 2017

Another declaration innings, this time against Sri Lanka at home. This gets a slightly higher rank because it's a double century, but M Vijay, Cheteshwar Pujara and Rohit Sharma all also managed to hit the three-figure mark.

27. 200 v West Indies, North Sound, 21 Jul 2016

This was Kohli's first double-century in Test cricket, and proved instrumental in helping India declare their first innings and secure an innings win. But once again, conditions were relatively easy and the bowling attack not very threatening.

26. 211 v New Zealand, Indore, 8 Oct 2016

New Zealand arrived in India with a relatively non-threatening attack of Trent Boult, Matt Henry (remember, this was 2016), Jeetan Patel and Mitchell Santner. Kohli duly helped himself to 211.

25. 204 v Bangladesh, Hyderabad, 9 Feb 2017

It's a tad unfair to have four double tons so close to the bottom but like a few previous entries, Kohli proved himself to be the best at cashing in on some helpful conditions. His 204 here was accompanied by centuries from Vijay and Wriddhiman Saha.

24. 105* v New Zealand, Wellington, 14 Feb 2014

Fourth-innings centuries are usually memorable – but not this one. India's target was 435 in just over two sessions, which they were never going to chase. Anyway, this was an important knock in terms of ensuring India didn't collapse and came away with a draw.

23. 243 v Sri Lanka, Delhi, 2 Dec 2017

Kohli's only century on his home ground in Delhi was a riveting watch, but not helped by the fact that only 27 wickets fell in the match, and Sri Lankan fielders were affected by the high pollution levels in the city.

22. 186 v Australia, Ahmedabad, 9 Mar 2023

On its own, this was another one of Kohli's run-machine knocks in a draw on a good deck, but gets a slight bump for its significance – the one that broke his drought of over three years without a Test ton.

21. 103 v Sri Lanka, Galle, 12 Aug 2015

This was an important knock where Kohli helped India recover from 28-2 and take 192-run first-innings lead. But Dinesh Chandimal scored a wild 162 in the next innings, and it didn't help that India – Kohli included – collapsed against Rangana Herath in the run chase.

20. 169 v Australia, Melbourne, 26 Dec 2014

This was one of the tons on Kohli's golden tour Down Under in 2014, but the sheen is taken off slightly thanks to Steve Smith's 192 in the first innings, and Ajinkya Rahane's 147 alongside Kohli. It was his first ton as Indian skipper, which counts for something.

19. 254* v South Africa, Pune, 10 Oct 2019

Kohli's highest Test score – but not his best century. The volume earns it a spot in the middle here, but the knock itself came in good conditions. Three other Indians scored half-centuries and Mayank Agarwal scored 108 as India only batted once.

18. 100* v Australia, Perth, 22 Nov 2024

Kohli's most recent ton came when India had the best of the batting conditions in a low-scoring Test. He did see through a tricky period in the middle of the innings, before accelerating to a century and showing us all that he's still got it.

17. 235 v England, Wankhede, 8 Dec 2016

Perhaps his best double, it still came against an England attack not terribly well-suited for the conditions at the Wankhede Stadium. Kohli's 235 helped ensure India had to bat only once, but make what you will of the fact that Jayant Yadav also scored 104 in this innings.

16. 121 v West Indies, Port of Spain, 20 Jul 2023

This was Kohli's 29th century, and came over a year before his 30th. It helped India post 438 in the first innings, which eventually proved too much for the West Indies. Rain denied India the chance to push for a win on the final day.

15. 147 v Australia, Sydney, 6 Jan 2015

Australia ground India into the dirt in the first innings, but Kohli's knock in the second kept their lead to only 97. He also scored 46 in the fourth innings as the match ended in a draw. This was his third innings as a Test captain, and his third century.

14. 136 v Bangladesh, Eden Gardens, 22 Nov 2019

While not the strongest opponent, this was the first pink-ball Test on Indian soil and therefore a step into the unknown. India's bowlers made sure they won the match, but that wouldn't have been possible without Kohli's century in the second innings ensuring the lead was just too much for the visitors.

13. 153 v South Africa, Centurion, 13 Jan 2018

Most away centuries are special, and this was one of those from Kohli. His 153 was half of India's score in the second innings, as no other batter scored more than 46. India went on to lose, and as skipper Kohli called for his players to "be hard on themselves" and reflect on their poor batting performance.

12. 167 v England, Visakhapatnam, 17 Nov 2016

This was a low-scoring Test match, and India's 455 in the first innings was what set them up for victory. What set that total up was a 226-run stand between Kohli and Pujara, a partnership that saw Kohli even shed the role of aggressor at times. The range, opposition and conditions make it a superb century.

11. 103 v New Zealand, Bengaluru, 31 Aug 2012

Kohli's first Test century at home helped India recover from 80-4 to 353 in reply to New Zealand's 365. Given the stage of his career he was at, it was an exceptionally mature knock. He followed it up with an unbeaten 51 to seal victory in the fourth innings.

10. 107 v Australia, Chennai, 22 Feb 2013

Kohli's innings here was overshadowed by MS Dhoni's aggressive 224, but was just as crucial in ensuring India raced past Australia's 380 to take a 292-run lead – and eventually win by eight wickets.

9. 103 v England, Nagpur, 13 Dec 2012

This series ended in a chastening loss for India, but Kohli's century in the Nagpur draw earned the youngster rave reviews at the time. Two years before he would ever lead India in whites, this innings was what prompted Sunil Gavaskar to say Kohli the captain was ready.

8. 103 v England, Nottingham, 18 Aug 2018

This was very nearly a Test match with twin Kohli hundreds. First, his 97 helped India post 329 in the first innings. His century in the second ensured that the game was taken out of England's hands in their own backyard.

7. 115 v Australia, Adelaide, 9 Dec 2014

The first of two hundreds in this match, his first as captain. Kohli ensured India weren't miles behind a mammoth Australian total of 517. This was also his first ton Down Under, but in all honesty is probably cherished a bit more because of what followed.

6. 123 v Australia, Perth, 14 Dec 2018

Ahead of this year's Border-Gavaskar Trophy, Kohli called this knock at the new Optus Stadium his best in Australia. We make it his third, but it's all subjective.

On a spicy wicket, this was the highest score of the match, and Kohli's celebration – let the bat do the talking – is now iconic. India were eventually blown away, but this innings lives on fondly.

5. 104* v Sri Lanka, Eden Gardens, 16 Nov 2017

Sri Lanka's bowlers had punched well above their weight in this match, as India's batters scrapped for survival and ended up conceding a first-innings lead. But Kohli put his hand up in the third innings, holding up an end even as India continued to slide around him – taking them to a safe enough total to declare, before the visitors batted out a draw.

4. 149 v England, Birmingham, 1 Aug 2018

This, before the century in Nottingham, was another lone-warrior innings from Kohli. The next highest score in India's innings was 26 even as he single-handedly dragged them to within 13 runs of England's 287. It was a similar story in the run chase as he scored 51 but got no support as India lost by 31 runs.

This was also a highly satisfying match for Indian fans, who saw the ghosts of Kohli's disastrous 2014 tour of England exorcised in Birmingham.

3. 116 v Australia, Adelaide, 24 Jan 2012

His first-ever Test ton – and one of his best. India were never in a position to win this match, but their greatest batting talent of his generation had ground out the runs when Sehwag, Dravid, Tendulkar and Laxman couldn't. It was the first sighting of sweary Kohli in whites, and while that's mellowed, the memories haven't.

2. 119 v South Africa, Johannesburg, 18 Dec 2013

In his very first knock in South Africa, Kohli played another one of those lone hands. One feared he'd become accustomed to it by then. Against the No.1 Test team in the world and a bowling attack of Steyn, Philander and Morkel, he helped India post 280 and take a first-innings lead. He also scored 96 second time around.

The match was eventually drawn, but the legend of Kohli began to gain steam.

1. 141 v Australia, Adelaide, 9 Dec 2014

In all likelihood, Kohli's best Test ton was his second in this match, and came after Australia had declared with the confidence that 364 would be too much for India.

This was one of the great counter-punches as Kohli struck at a scarcely believable 80 in the fourth innings, batting like a man possessed, tearing into Mitchell Johnson, Ryan Harris, Peter Siddle and Nathan Lyon. He was the seventh to fall with India still 60 away from a win (they lost by 48), but it was an utterly magnificent display which no one will deny deserved a happier ending.

Follow Wisden for all cricket updates, including live scores, match stats, quizzes and more. Stay up to date with the latest cricket news, player updates, team standings, match highlights, video analysis and live match odds.