While Henry already has given a way to compute the number exactly by counting all the partitions, it might be interesting to know about two approximate methods.
In addition, there is an alternative exact computation based on conditional Poisson distributed variables.
Computational simulation
You won't be easily able to compute all $12^{18}$ possibilities (and it won't be easy to scale up the problem), but you can have a computer simulate randomly a subset of the possible ways and obtain a distribution from those simulations.
# function to sample 18 birthmonths
# and get the maximum number of similar months
monthsample <- function() {
x <- sample(1:12,18,replace = TRUE) # sample
n <- max(table(x)) # get the maximum
return(n)
}
# sample a million times
y <- replicate(10^6,monthsample())
# obtain the frequency using a histogram
h<-hist(y, breaks=seq(-0.5,18.5,1))
Approximation with Poissonation
The frequency of the number of birthdays in a particular months is approximately Poisson/binomial distributed. Based on that we can compute the probability that the number of birthdays in a particular month won't exceed some value, and by taking the power of twelve we compute the probability that this happens for all twelve months.
Note: here we neglect the fact that the number of birthdays are correlated so this is obviously not exact.
# approximation with Poisson distribution
t <- 0:18
z <- ppois(t,1.5)^12 # P(max <= t)
dz <- diff(z) # P(max = t+1)
Computation with Bruce Levin's representation
In the comments Whuber has pointed to the pmultinom package. This package is based on Bruce Levin 1981 'A Representation for Multinomial Cumulative Distribution Functions' in Ann. Statist. Volume 9. The outcome of birth-months (which is more precisely distributed according to a multinomial distribution) is represented as independent Poisson distributed variables. But unlike the before mentioned naive computation, the distribution of those Poisson distributed variables is regarded to be conditional on the total sum being equal to $n=18$.
So above we computed $$P(X_1, X_2, \ldots , X_{12} \leq 4) = P(X_1 \leq 4) \cdot P(X_1 \leq 4) \cdot \ldots \cdot P(X_{12} \leq 4)$$ but we should have computed the conditional probability for the Poisson distributed variables being all equal or lower than $$P(X_1, X_2, \ldots, X_{12} \leq 4 \vert X_1+ X_2+ \ldots + X_{12} = 18)$$ which introduces an extra term based on Bayes' rule.
$$P(\forall i:X_i \leq 4 \vert \sum X_i = 18) = P(\forall i:X_i \leq 4) \frac{P(\sum X_i = 18 \vert \forall i:X_i \leq 4 )}{P( \sum X_i = 18)} $$
This correction factor is the ratio of the probability that a sum of truncated Poisson distributed variables equals 18 $P(\sum X_i = 18 \vert \forall i:X_i \leq 4 )$, and the probability that a sum of regular Poisson distributed variables equals 18, $P( \sum X_i = 18)$. For a small amount of birth months and people in the group this truncated distribution can be computed manually
# correction factor by Bruce Levin
correction <- function(y) {
Nptrunc(y)[19]/dpois(18,18)
}
Nptrunc <- function(lim) {
# truncacted Poisson distribution
ptrunc <- dpois(0:lim,1.5)/sum(dpois(0:lim,1.5))
## vector with probabilities
outvec <- rep(0,lim*12+1)
outvec[1] <- 1
#convolve 12 times for each months
for (i in 1:12) {
newvec <- rep(0,lim*12+1)
for (k in 1:(lim+1)) {
newvec <- newvec + ptrunc[k]*c(rep(0,k-1),outvec[1:(lim*12+1-(k-1))])
}
outvec <- newvec
}
outvec
}
z2 <- ppois(t,1.5)^12*Vectorize(correction)(t) # P(max<=t)
z2[1:2] <- c(0,0)
dz2 <- diff(z2) # P(max = t+1)
Results
These approximations give the following results

> ### simulation
> sum(y>=4)/10^6
[1] 0.577536
> ### computation
> 1-z[4]
[1] 0.5572514
> ### computation exact
> 1-z2[4]
[1] 0.5771871