Creating a coupon code programmatically in Magento 2 involves using Magento's Quote and SalesRule functionalities.
 
use Exception;
use Magento\Backend\App\Action;
use Magento\SalesRule\Model\Rule;
use Magento\SalesRule\Model\RuleFactory;
use Magento\Framework\Controller\ResultFactory;

class Create extends Action
{
    protected $ruleFactory;

    public function __construct(
        Action\Context $context,
        RuleFactory $ruleFactory
    ) {
        parent::__construct($context);
        $this->ruleFactory = $ruleFactory;
    }

    public function execute()
    {
        try {
            // Create new rule
            $rule = $this->ruleFactory->create();
            $rule->setName('Sample Coupon Code')
                ->setDescription('This is a sample coupon code')
                ->setFromDate(date('Y-m-d'))
                ->setToDate(date('Y-m-d', strtotime('+1 month')))
                ->setCouponType(Rule::COUPON_TYPE_SPECIFIC)
                ->setCouponCode('SAMPLECOUPON')
                ->setUsesPerCoupon(1) // Max usage per coupon
                ->setUsesPerCustomer(1) // Max usage per customer
                ->setIsActive(1)
                ->setSimpleAction('by_fixed')
                ->setDiscountAmount(10) // Fixed discount amount
                ->setStopRulesProcessing(0)
                ->setWebsiteIds('1'); // Set the website ID(s) where this rule will apply (as a comma-separated string)

            // Save the rule
            $rule->save();

            $this->messageManager->addSuccessMessage(__('Coupon code created successfully.'));
        } catch (Exception $e) {
            $this->messageManager->addErrorMessage(__('Error creating coupon code: ' . $e->getMessage()));
        }

        // Redirect back to admin page or show result
        return $this->resultFactory->create(ResultFactory::TYPE_REDIRECT)->setPath('*/*/');
    }
}